Generally I've always found the underlying principle behind the Australian system[0] to be a reasonable middle ground.
Those making less than a certain amount can only be terminated:
a) immediately for cause (theft/fraud/etc)
b) with notice for poor performance
c) with notice and a legislated payout for redundancy where the job is no longer required.
Those earning above a certain amount need to negotiate any/all of these into their contract.
Admittedly it does occasionally result in employees being reinstated whose sacking was (IMO) completely justified. I don't like those specific instances, but I figure it's the price you have to pay for a system that is tilted slightly in favour of employees.
[0] The actual laws are rubbish though, they're intentionally obtuse/vague owing to industrial relations being a political minefield and no government wanting to touch it for fear of voter pushback.