If we keep it simple, it will likely work best.. check this concept out...
1. All players drafted in 2015 and 2016 amateur drafts are auto protected, UNLESS they have ML service time (then they have to be included in the protected 20 players in point 2)
2. Each existing team can protect 20 other players
3. No existing team can lose more than ONE player per round AND every existing team loses one player per round (16 picks per round, 4 picks per expansion team per round)
4. This is optional... all players aged 20 and under on January 1st 2017 are auto-protected so long as they don't have any ML service time
What this means is that IF every existing team protected 20 guys on their current 25 man ML roster there would be 80 current ML level guys available for drafting, that's equal to 20 players per expansion team, plus all of the AAA and AA guys not drafted in 2015 and 2016.
What will likely happen is that some teams will also choose to protect some guys drafted in 2013 and 2014 so more ML level talent will be available.
This does three things:
1. Gives existing teams a choice to protect youth, current talent or a mix
2. Ensures there is enough ML level talent available for the expansion teams to use as trade bait or to build with
3. Ensures those 21-25 year old guys yet to make it in the big leagues are given a shot with an expansion team - it would be good to see some of these guys grow and become stars, and it will happen
I highly recommend keeping the protection simple so that everyone understands it.
Edit: I just ran this approach on my organisation and there would be handfuls of 1.5 to 2.5* players available, some veterans but also some guys who are nearly ready for the Majors. Some real diamonds for the right expansion team GMs - I expect others would protect less on their current 25man roster than me as well.