Among the posted solutions I think Julia's one might be the best, but I want to point out an important aspect: with selections so complex as that for a company, of which there are likely many with very similar if not identical names, the thing that could help the most in avoiding both duplicates and erroneous entries is giving the users extended information about the selected (already existing) company: give the users information about the company location, its logo, its field of activity, but actually even just their website, that could be more than enough: it's very easy for a user to click a link and check that that's what he meant (and there are very few companies without a website these days).
Actually you could likely allow and demand the users to enter the information themselves if they want to add a company: this is both increased effort that stimulates searching for an existing match and a quite trivial of an effort if the user really wants to enter the correct information: it's very likely that he already knows the company's website.
To be sure not to frustrate too much the users you could allow them to skip the website information entry, but you should do that rather hard to do; you might activate the option after a minute, maybe still showing it, disabled, but saying to those who click it something along "Please try for a little longer to find the company website. If you can't find it in a minute you'll be allowed to go on without that".
Actually in the end it would likely make sense to allow the entry of either the company name or its website's url, and the entry (paste) of the url will likely be easier for most users.
You should consider only the second-level domain name of the url by default, and maybe tell that to the user for confirmation and allow to instead enter a longer part of it they say it's not correct to cut it (some company might have a site without their own domain name).
Many little companies have just a social network page, you should handle the major ones (facebook...) automatically, recognizing them and probably storing only the relevant part of the url for them.
You could think about e-mails as another option, but that would likely help little and add confusion, as most companies will have more than one, and while you might want to consider only the domain part, those who don't have a website will likely neither have e-mails with their own domain.
You could, and maybe should, go further with this by making yourself internally a web search with what the user enters, displaying the first urls found (of course as clickable links) and making the user select the correct one.
You should sort the informations returned by number of past selections and, if you do the web search, by relevance from the search engine.
Consider also if it really makes sense to allow the users themselves to add new companies, if they are not very frequent it might be better to make a less automatized process, with a request for adding a new company or in any case with a second check on your part that the entered company is new and its information is correct.
As an aside, if this makes you think of using the url as a database key, not the worst idea but not ideal either, urls change owners and probably not every single company in the world has a website.
Well actually I'm not sure Julia's solution (requiring the entry of the full name) is the best one, if you implement the checks I wrote here you should probably allow partial entries of the name, and of course searching results as the user types