A bit of a more complicated option:
Commence FA exactly 7 years after MLB call-up, ie. if called up July 25, 2018, the player hits free agency on July 25, 2025. The player doesn't actually enter the free agent market, but remains with the team from July 25, 2025 until season's end. Compensation from July 25, 2025 to season's end is calculated based on the average compensation for the highest paid 25% of comparable players using WAR (or some other accepted metric).
By this method there is no reason for a team to keep a MLB ready player on the farm.
As well, players will not be elevated to MLB until they are truly ready. MLBPA will like this, veterans less likely to be replaced by A+ or even A ball players as has happened in the past.