This is something I have thought about since the Mariners lost Alex Rodriguez to the Rangers. The Mariners drafted him, developed him, and he became a star there and then when his contract was up he bolted. I propose the institute a franchise tag in MLB like they have in the NFL.
They already award draft picks if that player is a Type A free agent but the current team has no way to prevent the defection of their best asset and who's to say draft picks will pan out? I would propose they be allowed to put a franchise tag on the player and then work out a trade with the current team to obtain the rights to work out a deal with that player. If you want to franchise the player you average the top 5 players at his position and add 5%, if you franchise him the next year you add 10%. That gives the current team at least 2 years to work out a deal or trade and allows them to get decent return (major league talent) if they do lose that player.
Teams like the Yankees should not be allowed to use other MLB teams like the Mariners as farm systems since they haven't really had one until recently. At least the current team can have some options, if they don't want to pay the price then they can simply let the player walk and get the draft picks in return but if they really covet that player and he is the cornerstone of their franchise then they don't end up like the Cleveland Cavaliers did when LeBron James left them.
I think it's time to even the playing field if they aren't going to have a salary cap. The Twins were afraid they were going to lose Joe Mauer and if he had wanted to explore his options there is nothing they could have done about it. It needs to stop and it needs to happen soon. Just my humble opinion of course.