Technically, one
In FreeCell, you are only allowed to move 1 card at a time, either to or from a free cell or from one stack to another.
That said, it is trivial to move an entire stack of N+1 cards, where N is the number of free cells, by moving N cards to the cells, moving the last card to the new stack, and then pulling down the stored cards onto the new stack.
Most computer implementations of FreeCell allow you to move entire stacks without having to step through the intermediate storage on the free cells (as long as there are enough free cells). An implementation without this ability would be totally playable, but it would be aggravating to use because simple actions would take significantly more work on the part of the player.
Empty columns can be used as free cells, simply adding 1 to your free cell count. But they're also much more powerful than that, because they can hold stacks.
If you have a single empty column, you can transfer N+1 cards to that column, N+1 cards to the new stack, and then transfer the N+1 cards from the formerly empty stack onto the new column, for a total of 2*(N+1) cards moved. Obviously, this only works if you're not transferring cards to the empty column, in which case you're limited to only using the free cells, for N+1.
If you have two empty columns, you can transfer 2*(N+1) cards to that column (using the other empty column, N+1 cards to the second column (since you no longer have an empty column to use), then N+1 cards to a new stack, then reverse that process to pull all 4*(N+1) cards onto the new stack.
With three columns, the third column will be able to store 4*(N+1) cards, leading to (4+2+1+1)(N+1) = 8(N+1) cards being movable.
I hope you can see at this point that the trend will continue, and the total formula is
(2^M)*(N+1), where M is then number of empty columns and N is the number of empty stacks.
All of that said, transfers that utilize columns to their maximum effect are more complicated, less common, and less labor intensive than just using free cells. If your implementation forces players to use columns manually it won't have the same excessive effect on quality of play that not using the free cell shortcut would have. Experienced players would probably be unhappy, but it would still be playable.
Additionally, it's not necessarily obvious to new players how to get the maximum transfer using 2+ empty columns, so by doing those maneuvers for them you are possibly allowing players to make moves that they couldn't figure out on their own. Remember, the goal here is to shortcut routine, obvious, and boring moves without actually providing strategic aid to the player. That's a judgement call on your part.
My vague memories of Microsoft's earlier implementations was that it either only shortcutted free cell moves, or free cell + one empty column moves, and if you wanted to use more than one empty column you had to figure it out yourself. I don't remember for sure, though.