We only index on one field, and we default to the email field. You can choose to ignore a field if data is already present in it ("merge and underwrite") or overwrite all data forcibly ("merge and overwrite"). We also have the ability to make the upload create new contacts for each entry in the CSV, but that will duplicate contacts if they already exist, and not update them.
We don't have a way of dynamically deciding between these options based on the existence of data in the contract record already. And we don't have a way of matching on multiple fields for the merge information.