Handling External DB without PK
If the external company is not willing to correct their export, then you can set up your own lookup table.

CREATE TABLE dbo.Companies
(
  CompanyID int IDENTITY(1,1) PRIMARY KEY,
  CompanyName nvarchar(255)
);


Now, when you get a new import, I assume this goes into some temporary ETL table. So you do:

INSERT dbo.Companies(CompanyName)
  SELECT company_name 
  FROM dbo.ETL_Table AS etl
  WHERE NOT EXISTS
  (
    SELECT 1 
      FROM dbo.Companies 
      WHERE CompanyName = etl.company_name
  )
  GROUP BY company_name;


Now you can join against your lookup table on the name, and that join can produce the IDs you need to use in your own referential integrity.

This does not handle the case when a company name changes, and I don't know how you can detect that.