Is this correct normalization for my tables?
I'm not familiar enough with Laravel 7 to understand how well it implements alternate keys/composite keys, but this is basically what you've described:

Notes:

The alternate keys are crucial as an Id in and of itself does not provide uniqueness as required by the Relational Model.  If I can spam &quot;Customer 1, Dwayne Johnson&quot; a million times into Contact then no key exists and there is a normalization error.
The composite key (CustomerId, ContactId) is required to ensure CustomerId is migrated properly to Order
IE is inversion entry, or non-unique index.  This allows orders to be quickly searched by customer.
ContactId itself is not unique.  If you are using a ORM that requires an Id column on everything, you would need to make the relationship between Customer and Contact non-identifying.  In doing so you will remove the ability to retrieve a customer's orders without joining to Contact first.  Under no circumstances should you create a relation between Customer and Order as the Contact selected must belong to the Customer in question and this would introduce a normalization error.

Revised model based on comment: