First, I would suggest creating a quota of sorts that restricts owners to how many "x year" contracts they can hand out. Maybe 1 four-year, 2 three-years, 4 two-years, and the rest one-year. Something to that effect. That will be one of the easiest ways to accomplish your goal, and it guarantees that every good player won't be locked down for the rest of the decade - and who doesn't like having good players to actually bid on?
Besides that, I once heard this rule:
Total contract value wins out unless the average yearly contract value is 20% greater than the longest offer for every year less than the longest offer.
For instance, a 4-year, $10/M per offer could be beat by:
3-years, $12/M per,
2-years, $14/M per, or
1-year, $16M/ per
Don't know how well that worked, but it seems okay on paper. I'd go with an expanding percentage instead of a linear percentage; maybe 30%/40%/50% or something. Decimals rounded up, of course.