The only problem that I have with companies being allowed to fire employees at a whim (i.e. they weren't fired for poor performance or anything they did wrong) is that the term 'fired' has a pretty negative connotation. If you get let go from your job and they say you were fired, it's going to be harder for you to get another job. I don't think employees should have to put up with the stigma of being fired if they were just let go because the company needs to save money, or they decided the person's position is redundant. Then again, if you required them to have a reason to fire someone, if they really wanted to get rid of the person, they'd just make something up.
The best compromise might be to let companies fire employees for whatever reason they want, but require that if they are contacted about why that person no longer works there, they must truthfully distinguish between employees who were fired for poor performance, and those who performed fine and were fired anyway.