Yes, you are right, by default Kentico strangely merges multiple contacts to the same user on login. But this can be customized in the code. Basically, you need to:
Implement ICurrentUserContactProvider interface (you can copy Kentico's default implementation DefaultCurrentUserContactProvider to begin with)
Amend the logic of GetContactForCurrentUserAndContact method. For example, you can check here if current contact's email is not equal current user's email - return null and Kentico will create a new anonymous contact for that user. Or try to find existing contact for user's email, it's up to you. This code will be called on login before assigning the contact.
Register your custom implementation like this:
And that's it.