It sounds to me like the Fog Creek system has been working well for years, and I wish all companies had such a system in place. I well remember working on the payroll system for a prior employer and discovering that I was making significantly less than a junior employee who was always looking for help (still learning how to do the job). They had less experience, same level of education, and an attitude of doing "just enough".
Oh, did I mention I'm female, and they were a male? Keeping salaries "hidden" allows all kinds of discrimination to go on. And if you find out about it and challenge it, you can (and will) be fired for bringing it up to anyone - including HR - because you aren't supposed to know another person's salary, and if you do you must have gotten it by nefarious means and be a very baaaaad person.
In my state, you can be fired "without cause" at any time, and your employer does not have to provide any information to anyone as to why you were fired. So regardless of whether contract language about not disclosing salary is legal or not, you'll still be looking for work.
I believe open and honest really is better than black-boxing this sort of information. Most people would understand and appreciate a system that allows equal pay for equal work, especially when the criteria are posted for everyone to see. And salary is not MY only consideration when job-hunting, or even job-staying. Environment matters; how you're treated, the attitude of your co-workers, whether you have access to hardware and software adequate to do you job, and whether your employer values you enough to invest in occasional training. I agree with Joel's statement that if I work for a miserable boss, I'll want more compensation. And there are some behaviors that aren't worth putting up with for ANY amount of money. IMHO
Here there be dragons...,