It's called CGNAT when you do it near the end user / eyeballs and do it generically for all services on the internet.
When you do it near the service being provided, and only for your own services, it's called a Reverse Proxy.
You are right that these two things are similar, but they aren't identical; CGNAT attempting to handle you trying to talk to who knows what on the Internet (e.g. game servers, VoIP) is a much harder problem to solve than a Reverse Proxy handling a known set of protocols you want to expose.
And, yes, an unloaded CGNAT or Reverse Proxy is not noticable in terms of performance. However, both of them have load limits where you need to scale them up, and particularly CGNAT frequently degrades (due to larger tracking tables) before completely falling over.