You can also ban by name alone. So if you have a 64 slot server, you create bans for 1 through 64. Using X's for the guid and 0.0.0.0 for the IP, with a ban reason of "That name is not allowed". That will do the trick. The simple solution would be to stop the server from allowing clients with 1 - 64 as a name to join and have it give the reason. Creating a ban accomplishes this. Anything done client side can/will be modified so server side is really the only place to do this.
There is the complication of people using black characters in their name, so their name would appear to be 4
notslot4. That may be patched in svn so that black characters in names do not show as black. If not, I'm pretty sure there are patches for it.
Ultimately, the issue is caused by the server allowing the ambiguity to exist. The cleanest and least complicated solution from the perspective of players/admins would be to simply not allow those names to be used.
Warning: Tangent 
Of course, having the vote kick cache the IP at the time the vote is called may not be a bad idea. That way, a vote kick called on slot 4, client at slot 4 quits before the vote ends, User "Poor Sucker" joins into slot 4 before the vote is over and is then vote kicked for whatever reason could be avoided. The vote kick ban could be placed on the IP, so even if poor sucker at slot 4 is kicked, he wouldn't be banned for an extended period of time, which is common anymore with vote kicks.
Here's a quicky that will generate the bans for you, dump its output (using >>
NOT >

) into admin.dat. Using bash that is. I avoid the windows command line like the plague, so windows folks, ask a linuxy friend for the list

Don't forget to readconfig afterwards.
for i in `seq 64`;do
echo
echo "[ban]"
echo "name = $i"
echo "guid = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
echo "ip = 0.0.0.0"
echo "reason = pick a real name or get out, name $i is not allowed."
echo "made = 07/17/07 20:08:00"
echo "expires = 0"
echo "banner = Console"
done