The other side is that, if you're not as good as you're supposed to be, normally you won't get fired just in one year, you are actually overpaid. From the corporate side, the better engineers are covering the loss(those are overvalued but still too early to be laid-off).
So the best and most capable ones will switch jobs after 3 years, not totally because the company is too greedy. Unless there is a way and culture to make your salary can go up and down each year based on your performance, there is no good solution(because pay-cut is not common no matter what). In the end those who are overpaid will more likely to stay, those who are undervalued will likely jump board.
One way is to keep salary less important, like an average value that is reasonable for both sides, then the company can use monthly/quarterly/yearly bonus to reward the top employees, but who could like it when he has a 30-year fixed-rate mortgage that needs a sense of secure/stable income.