I'm not sure if the following is the same as 2 above, but I don't think so: Without knowing what the source data or the db table(s) looks like I'll say that if you created a table of "synonym" names you could update the name field with values from that table. That is, if your query finds ABC Corp it updates it to ABC Co. However, I foresee a lot of looping through "proper" values and comparing them to source data. Such an operation might take so long that it would best be done after hours (automatically).
There is another thing called the Levenshtein distance which is used to find close matches between words, but it results in more of a suggestion based on the distance value you set. Thus with the appropriate distance value it should find appple when you compare it to apple, but it may not find apl. Whatever the results are, it still would require you to make manual determinations. I throw it out here just in case it would work for you. There are code examples using the technique but I suspect they will be daunting should you decide to research the suitability of it.
As always, the best fix is to get some control over input in terms of consistency. If you can translate into hours and money spent the work you are routinely faced with, you might get some buy-in for fixing the issue at the source. My take would be that if I could not convince management to induce some control, then they are happy to pay me to fix other people's carelessness.