You aren't going to be able to change the primary key since that isn't (and shouldn't) be the unique identifier within Salesforce for a record.
If you want to prevent duplicate entries, and you are unable to use any other entry event type, you could run an automation to check the _sent data view for emailaddresses that have received a send from the journey. You could then use an exclusion script to exclude everyone in the target DE from that query, or you could update a column in the entry event DE to flag duplicate emailaddresses and then decision split those away from send activities.
There are a lot of different solutions you could implement here but, as far as I know, you aren't going to have much luck trying to alter the Salesforce Campaign entry event data.
Update (to include example):
Here's an example of how to do this:
Step 1: Create a data extension to house your results from the query.
Step 2: Create an automation to run a SQL query to run at an interval in order to append records to the DE from step 1. This should check the _sent data view to include emailaddresses that have received an email from the journey since you started it.
Step 3: Go to each email send activity in the journey and add this as an exclusion script:
ROWCOUNT(LOOKUPROWS("Query_Target_DE", "EmailAddress", emailaddr)) > 0
That should suppress everyone from that activity that has already received one of the emails in that journey.