This is one of the reasons that the article I linked to above recommends a community-based approach. friend.camp (Darius' instance) uses a Patreon to cover the (fairly small) costs of hosting, registration, etc. I think a lot of users donate something like $1-$5/ year.
Running an entire server just for personal use may be overkill in terms of time-investment, monetary costs, etc. But for a small group of users these costs are negligible, and the small community still gets the benefits of having a lot of control over how the instance operates (who to federate with, custom features, etc).
We are used to thinking in terms of solutions that are either totally individualistic (everyone for themselves) or rely on giant monolithic institutions. A system made up of small, autonomous communities which can still communicate is a nice middle-ground.
Use a dynamic dns provider, it'll give you a domain name that changes your IP record as it changes.
My thoughts were that if Mastodon nodes connect each other so that anyone on any node can communicate with anyone on a different node, can't nodes with dynamic IPs set up persistent connections to reachable nodes so that those will work as a sort of DNS?