First for the usernames, you already have the answer:
you can’t make the usernames the same, while you can make the username hidden for the user during registration, and set automatically, for example, based on the user’s email address
Second for the other fields, they already work the way you want and are not unique. You could give every user the same first/last/display name, they are not unique.
And then to log in only by e-mail and password.
WordPress already has this out the box by default, no changes are necessary, it already works.