"Extremely fast" is a relative term. That aside, you have a couple of options:
- Regular Expressions: if you are very good with regexes, this is a valid use for them. You can also look forward/behind with them, which allows for a fair amount of flexibility.
http://www.regular-expressions.info/lookaround.html
Character by character parse: this is often the best way of doing string manipulation (and fastest), but can be the most time-consuming to create.
String replaces; fast but there's usually an edge case that doesn't work correctly (speaking from experience).
In all of these scenarios, you can benefit from pre-optimizing your list of terms by sorting/grouping/filtering them appropriately. For example, sorting biggest to smallest length would ensure that you didn't split up a long string (and miss a match) by bolding a shorter string within it.
You could also predetermine optimal regex(es) by examining all the search terms before beginning the replace. Again, this would assume you are pretty savvy with regexes.