What is the difference between the Viterbi algorithm and beam search? I'm just confused because I'm having trouble wrapping my head around the difference. If we were to set the beam size to be equal to the number of possible states, wouldn't that mean the beam search algorithm is equivalent to the Viterbi algorithm?
The only true difference I can think of between the two is that beam search is not guaranteed to find the optimal solution whereas the Viterbi algorithm is. However, and assuming computing power isn't an issue, if we set the beam size to be equivalent to the output space, then wouldn't we also eventually find an optimal solution?

Yes, you're exactly right. If you set the beam size equal to the size of the HMM or CRF's state space (which is what I assume you meant by 'output space'), then you're guaranteed to find the optimal solution. This is because your search is now exhaustive.
The beam size is the number of candidates to expand in your search, as you move through the time series. If you expand all of them, then this is the Viterbi algorithm.

Recall that the time complexity of the Viterbi algorithm is $O(TN^2)$, where $T$ is the length of the time series, and $N$ is the size of the state space. The fact that this scales quadratically is what motivates beam search: reduce that $N^2$ to $K^2$ for some $K \ll N$, at the cost of exactness. If the state space is small, that's not a big improvement. But if thousands of states are possible (as with a WFSA language model), then this can make a big difference.
