The SFMC instance is being shared by multiple countries of the same client. To avoid over writing each other's data at any level(Subscriber/All Contacts), the client is expecting a prefix to the contact key. Now, since the data is coming via FTP, we are asking the source system to do this. They are able to do this and send us the data, so that when using the data for send and by utilising the subscriber key relationship, the pre fix will appear on All contacts and All Subscribers. However, we have a send out soon and the customers in there do not have a prefix. What are my options if we wish to do the send out and then change the contact key to whatever it is to the prefixed version. I am thinking on the lines of contact key migration. What is the impact for it and is there any cost involved with Salesforce?
You can't change the Contact Key once the contacts are registered. This happens e.g. during a send. Here your contacts will be added to All Contacts as well as All Subscribers.
If the contacts to who you are planning to send the emails are not already registered, you should be OK with updating their subscriber key in the sendable data extension prior to the send. In this process, you should prepend it with the country specific prefix. The Subscriber Key is probably the primary key of the sendable data extension, so you will need to move the data to a temporary staging table (while updating the subscriber key in SQL), and then overwrite the sendable data extension from that staging table. This will allow you to send the email to the recipients with the correct Contact/Subscriber key.
Alternatively, if you can't avoid sending the email to the "old" Contact Keys, and it's a matter of just a single email, I will advise you to simply move forward with receiving the correct data from FTP. This will temporarily lead to duplicate contacts. However, you should now do a contact deletion of these "old" contact keys, leaving you with only the new ones.
You will lose the tracking history, but given you only send a single email, this should be OK.
You don't want to do a subscriber key migration, unless you really need to. It should be your last option, as this introduces not only a cost with Salesforce, but also some downtime on your SFMC instance. I have described the high level process in another answer here: Updating Subscriber(Contact) key in Marketing Cloud