Combining all the character slots someone is using seems like a simple solution, but it is not. It is inherently unfair to people who didn't use any character slots on any other servers. Suppose one person paid for 10 slots, but only used them on one server. Compare that to some one who paid for 10 slots and rolled up 10 characters on 7 servers. After a merge the second player will have far more character slots (and potential storage) than the first player. Obviously the first player is highly incentivized to fill up every single slot on every server before the merge so that they do not have a disadvantage after the merge. Forgetting the rage that would ensue from players that forget to do this, the potential namespace pollution from the players that remembered to do it would be horrific.
The other solution is to combine all the characters from both servers, keep the character slot cap exactly the same, and make only the highest ranked XP ones available to play. Unavailable characters could only be accessed by deleting an available character or, if your slots aren't capped, by buying another slot. This is exactly what happens when you switch to premium from VIP. This would also outrage many folks, but to my mind is significantly fairer and more practical since they already have code to do this.