If you need a lot of concurrent development, you need to use a distributed version control system, ClearCase, or Perforce. ClearCase and Perforce don't do distributed version control, but they do handle merges probably better than most other tools out there.
ClearCase's merge is made for concurrent development and works extremely well. In fact, most developers in ClearCase develop on their own branch, then merge their changes into the integration stream when what they're working on is complete. The UCM layer on top of ClearCase simply automates this behavior.
Perforce's merging is more tuned to what they call divergent branching, but it seems to handle concurrent development okay.
Subversion is a nice version control system. I use it a lot, and you can't beat the price, but let's face it, merging in Subversion is still very, very rough around the edges. The use of properties to track merging is very hackish. When you look at logs, you see lots of changes simply due to Subversion changing the svn:merge property even though the files were basically unaffected. Plus, you must know when to use the --reintegrate flag.
Of course, distributed version control systems handle concurrent development with aplomb. It's the way they were designed from the start.
My only question is why are you doing so much concurrent development? Over the years, I've found forcing developers to work together on the same set of changes simply works the best. When forced to work on the same set of code, developers are more careful with their development. They take smaller bites, are more careful about changes, and communicate more with each other.
When I was working with developers in ClearCase, and each developer had their own branch, I use to go around and make sure developers were merging in their changes on a regular basis. It is so much easier to program when no one, but you is changing the code. Developers would simply do all their work on their branch without every getting the changes the other developers had made. You have 20 developers all doing this, and you see no changes on the main branch. Then right before we had a delivery, the developers would then make massive merges of all their changes. Hilarity ensued.
We would spend the next week trying to clean everything up and getting all of the developer's changes to work together. QA was upset because they had almost no time for testing. It wasn't uncommon to send the release out untested. After all, we had deadlines to meet.
There are good reasons to have concurrent development, but I've found many times it is the developers who request it because it makes their job easier. They don't have to coordinate their changes because it is now your job. After all, that's why they pay you the big money.
Well, not the really big money, but you're paid more than a lot of people. Maybe not the developers, but you make more than other people at your company like the janitor -- unless he belongs to a union. Well, you get stock options.