<p>I have a large text template which needs tokenized sections replaced by other text. The tokens look something like this: ##USERNAME##.  My first instinct is just to use String.Replace(), but is there a better, more efficient way or is Replace() already optimized for this?</p>

System.Text.RegularExpressions.Regex.Replace()
is what you seek - IF your tokens are odd enough that you need a regex to find them.
Some kind soul did some performance testing
, and between Regex.Replace(), String.Replace(), and StringBuilder.Replace(), String.Replace() actually came out on top.