How to parse environment variables and globals from a field
You could enable your client to use Reference Tags by adding the parseRefs filter.

{% set str = '&lt;p&gt;Since {globalset:42:yearEstablished}&lt;/p&gt;' %}
{{ str|parseRefs|raw }}


But this would enable them to access field values of (almost) any element (entries, assets, tags, ..), not just from global sets.
And they would also have to remember the global set's ID.

So your current replace filter solution is a good approach in my opinion. You can pass multiple replacements pairs like so
(and no, you won't notice if there's 1 or 100 of them):

{% set str = '&lt;p&gt;Since {yearEstablished}&lt;/p&gt;' %}
{% set replacements = {
    '{yearEstablished}': companyInfo.yearEstablished,
    '{siteName}': siteName,
} %}
{{ str|replace(replacements)|raw }}


You could also consider building that replacements array programatically.