You can mass edit Data with tools like CRM Fusion or free CRM plug-ins. Or, you could create Data Value Change Triggers for the email address field. For example, if email address contains @mcdonalds.com update the company name field with "McDonald's Corporation." (but that's a really manual process)
You could use RingLead to clean up the data:
We've recently started using Reach Force Smart Forms, which has helped us with that issue.
Other than the above, you can use a smart list like:
Email Address CONTAINS
Company Name IS
Company Name CONTAINS
Company Name STARTS WITH
which should handle variations.
Reachforce has a product called SmartForms that would help standardize company information coming into your system. When a lead starts writing a company value on one of your forms, a picklist of suggested matching companies renders allowing the lead to select the company they work for.
On the back end, the lead's data is enriched with RF's data based on the company they selected. RF also gives the lead a match confidence level (how confident are we that this person matches someone in our database) and allows you to update lead data based on the confidence of the match.
Hope this helps with controlling those company values on the front end.
As for cleaning up values already existing in your database:
You can easily get a list of all your company values by creating a Lead Performance Report and grouping leads by "Company Name".
From there you can export to excel and view all of the "Company Name" variations. This will allow you to easily see which values you need to merge.
I have come across this issue a few times. Usually during list preparation. We use an online company name matching software called FuzzyMatchCompanyName http://fuzzymatchcompanynames.com/
There are other tools available as well such as LeanData. Definitely try your alternatives before you buy.