I see what you guys are saying but I think the system is too broken to implement a fix like that. It would cause all deals to increase, substantially. I think mid-level salaries would become a thing of the past. Players would sign for maximum money or minimum, hoping to win a ring.
I'm not sure what the solution is. Another thing I heard that is a little more complex is creating a tier system. All players fall in one of so many tiers, say there is 6 or 7. Tier 1 is your minimum deals for aging vets or undrafted rookies. Tier 2 would be a little more, in the $2-5 million dollar range that fringe rotation players get. Tier 3 would be rotation players and questionable starters, paying them $5.1 million to $10, Tier 4 would pay between $10.1 and $16 for starters. Tier 5 would be All-Stars or centerpieces. Paying them between $17m to $22-23. Then max deals for All-NBA talent at the top between $23-$30 million. Stats from the previous year decides where they fall. Signing multi-year deals would be encouraged also because a player would be locked in at the highest tier they qualify for.
It would take some work but I think it could be done. The problem now, I think, is there aren't enough mid-level contracts. Very few players are paid what they're worth. Either they're overpaid or underpaid. Not much of a middle ground.
Perhaps a team could be limited as far as how many "max" players they can have. Don't allow any team to have more than max salaries on the books. There would need to be something that would keep players from taking a small discount that would allow their team to bypass it because they're not technically making the max. Perhaps 2 salary caps, or 3, 1 set salary number to sign your starters, 1 for rookies and young players, and another for veterans coming off the bench.