Not sure what you mean by a private IP, but generally speaking I think the service that you want is dynamic DNS (DDNS). There is client for the Pi for most providers. Google "dynamic DNS". What they do is give you a friendly URL (e.g. johndoe.dnsdynamic.com) and they manage the IP mapping. So the client runs on the Pi, "pings" the provider every once in a while. The provider detects the IP the ping is coming from and specifies that as the public IP.
However, using a MIFI presents another issue. Depending on the MIFI, you will have to open up the necessary ports or put your Pi into the DMZ (not recommended). I'm not sure that is supported by most MIFI's, at least not the ones I have seen.
The second option is to set up a VPN, as you mentioned. I'm not as familiar with this option, but you want something where you tunnel to a web-based host, and then you connect from your local machine to that web-based host. Otherwise you face the same issue with the MIFI and opening ports.
The last option (and maybe the best / easiest) would be to use a remote control type of tool such as NTR, TeamViewer, LogMeIn, etc. Not sure which ones have a linux client, and you'd need to run desktop, but they will all do the job even with a MIFI in the mix.