I need to associate Contacts to Opportunities.
One way will be to delete/hide the "New" button, and only leave it on the contact page: That's not acceptable by sales/marketing team.
So, what's my other options?
There can be many contacts related to any given oppty.
Is contact roles the solution? How can I make it a mandatory upon oppty creation?
Contact Roles is indeed the prescribed solution.
You cannot make it mandatory upon opportunity creation, unless you create a Visualforce page for creating new opportunities.
You could block the opportunity from moving to a next stage unless Contacts ar linked to the Opportunity. For this you'd need a trigger on Contact Roles that updates a field on Opportunity. See an example here: