If you don't fire bad employees and just shift them around, it's more likely they will find a manager that promotes them, is it not?
Unions sound to me like just another layer of bureaucracy, with its own mind and interests. Any extra bureaucracy increases corruption and inefficiencies.
Bad or under-performing managers will always be there, unless you work in a utopia. If you add un-fireable employees to the mix, you only compound the problem. Un-fireable employees also amplify the dead-sea effect: where good people will leave anyway after a while, but bad employees never do...what do you end up with?