Can I encrypt a file with multiple public address such that each of them can decrypt the file using their private keys?
Thus achieving a system to securely store file on IPFS which can be accessed by only a selected number of personals.
How exactly can I achieve this?
How can I achieve this in Solidity and JS.

We are going to assume you generated two different keys key1 and key2 using that method and now you would like to encrypt some data with key1.publicKeyArmored and key2.publicKeyArmored (Stack syntax highlighting is pretty bad right now, but it works, I promise) :

This doesn't answer the question, OP wants to use public keys to encrypt
– Vinnie JamesApr 4 '19 at 11:22

The only way it seems possible to me is doing so through PGP Public Keys. If they derive from the same private keys than an ethereum address, it makes them a public key to me.
– Tiago Loriato SimõesApr 4 '19 at 11:37

You should create a symmetric key for encryption and encrypt IPFS file with it, and then encrypt this symmetric key with different public keys so that each recipient can decrypt the symmetric key and in turn decrypt IPFS file.