This is what the whole IndieWeb movement is about -- being distributed rather than merely federated. I'm mildly concerned that the two camps seem to be building their own protocols rather than working together (excepting the existence of Bridgy Fed, perhaps).
Good point -- it would actually be simple to combine IndieWeb + Mastadon and solve this problem.
IndieWeb's solution is to own your own domain: https://indieweb.org/personal-domain. If you control your DNS, you can move your data to a different back-end provider and just update your DNS entries.
To combine this with Mastadon, just make your own domain, like https://chipotle.coyote, and point it at Mastadon-Server-A. Then if you want to move everything to Mastadon-Server-B, just copy the data and update DNS.
I agree with you but for the general social medial user updating the DNS records sounds scary and complicated. And for such user even if the idea of owning their own domain might sound compelling, how many will simply forged to renew the domain, be done with it and move to the next facebook.
I'm not sure it does solve the problem. Extreme example, but when you die, won't your domain registration lapse?
And you can argue that doesn't matter at that point, but it kind of does if I want to be able to use a social network for something like collective scrapbooking or time capsules. Or even just if I want to make sure that essays, projects, and Open Source work are permanently accessible to people who care about them.
Competition is good, but cooperation is also good, and protocols benefit enormously from network effects. (No pun on network protocols intended.) I suppose this isn't zero sum, though, strictly speaking.