I am not sure how difficult the programming might be and I know that it would take some extra work on the part of the moderators, but there could be a solution, and that is to have the ability to put members on "moderated" status where their messages have to be approved before they are posted.
That is how my Yahoo forum is set up and, though the Yahoo forum format leaves much to be desired in some areas, that feature works wonderfully. No one's right to express themselves freely without abusing others is denied, but spammers, flamers and those who want to get into personal attacks and name calling are first warned and then if need be put on moderated status where their messages have to be individually approved by one of the moderators. After a period, they can be returned to normal posting privileges with the possibility of again being put on moderated status if they return mis-behavior.
It also works well for those who have a problem with people disagreeing with their messages and want to continue to debate for no more reason that evidently insisting on having the last word if they cannot intimidate other members into submission.
In my opinion and experience of having the forum for over six years, that system is much better than having to chose between either allowing TOS violations and misbehavior to continue or outright banning someone. It is a way of saying "this is how the forum works, like it or not, and we will expect and enforce a certain amount of civility" and putting action behind the words.
Though it sounds like a lot of work, and it likely would be in the beginning, the tool is actually needed quite rarely. In part, that is because everyone who joins is put on moderated status for the first 60 days - or less if they have made enough posts to indicate that they are not there to spam, attack or disrupt. Knowing that the tool is there and that it will be used is plenty to keep it from having to be used except rarely.
I realize that having and using such a tool might result in some few people leaving the site. I think that the number would actually be quite small and that for the most part it would be "good riddance" if they left because they could no longer abuse other members or flaunt TOS rules. I also think that such a tool would prevent many, many more people from leaving who are turned off by the violations and attacks that continue to occur.
Granted, my Yahoo forum only has 2000 members and it is a single support forum - due to the limitations of the Yahoo format. That will likely change one of these days with a move to our own site where we can seperate topics and threads better and likely have a place for debate. One thing that will not change is the ability to put members on moderated status and it is something that I wish we had at CZ.