I must have been to the wrong school, or something, but the process you've described isn't the waterfall I'm used to - especially the bit about everyone waiting for everyone else to finish. While you're still at the planning stage, there should be meetings with all the developers and testers, to determine
a) what discrete tasks need to be performed,
b) which tasks depend on which other tasks and
c) which tasks can be performed in parallel with which tasks (which is rather determined by (b), above).
If you have enough resources, you just allocate one task each, and join your work flows at the dependency points. The longest path through the plan determines the project duration.
I don't care what methodology you use, putting the roof on before the walls are built won't work, which is why things called 'critical paths' exist.
Also, any PM who doesn't hold regular meetings (or 'standups' if you like) so that development groups can exchange information, is in the wrong job.