Rather than solving your problem, here's a way to take the lemons and make lemonade.
Many years ago a friend of mine was working on a very well-known FPS which had precisely the problem you describe: a constrained area would have a number of AI characters who had particular desired positions, and the path-finding algorithm was constantly bumping them into each other. In particular, the player would, say, throw a grenade into a small room full of enemies, and the AI characters in the area would each try to run to their exit, but run into each other, and end up pausing, turning around, hitting someone else, turning around, and so on. This looks very unrealistic.
Attempts to build a better pathfinding algorithm that could run successfully given the tight computational budget failed. So instead of solving the pathfinding problem, my friend added a very cheap check to the AI: if an AI has bumped into another AI twice in a short time period, stop trying to find the exit and instead take cover. So now what happens is, the PC lobs the grenade and sees a bunch of enemies run for the exits. Those that hit each other, turn around, and it looks like they realize they can't get out, so they duck and cover their heads right before they blow up. This is both realistic-looking and highly satisfying to the player.
Is there some similar way you can turn the disadvantage of your collision-producing algorithm and turn it into an advantage?