Does an encryption algorithm exist where encrypted data can be decrypted by multiple private keys?
Yes, quite easily, with key encapsulation and the appending the symmetric key twice (encrypted for each company):


Encrypt the data with a random symmetric key, for instance an AES key;
For each recipient, encrypt the symmetric key with the respective public keys of the recipients.


The ciphertext is the combination of the encrypted message and wrapped key for each recipient.

More theoretically, you could use identity-based encryption, which is close to what you describe. That does require a common setup, though, and possibly someone having a master key.