When designing a system, always start with the bare minimum. Do not overcomplicate any process that can be done effectively with simple means.
A unique email and a password is generally the minimum in most circumstances. Without knowing any additional details about your system it is hard to recommend anything more than this.
Assuming your "display name" is really a user name, user names are meant to uniquely identify users, if your user names are not unique, then they cannot be trusted. If users can see each other's non-unique user names, where multiple users have exactly the same display name, then this will be a source of confusion and lead to a mistrust in the system.
Usernames are generally implemented when either an email address is not required, there is not another means of uniquely identifying a user, or when you do not want to expose user's email addresses to other users. If none of these situations apply, then you should seriously question the value of having a username / display name.
First and Last name can be useful to further personalize the experience for the user, such as showing messages like "Welcome Jake to your dashboard," but should not be as a unique identifier on their own. Just crack open the phone book and you'll see what I mean.
Although allowing users the option to have multiple user accounts pointing to the same email address seems convenient, it really just over complicates everything related to users: authentication, resetting their password, mapping of all of their data, ... including the user experience as they would have to manage multiple identities.
During on boarding keep it as simple, fast and easy for the user to do, to increase the chances that they will get through it successfully.
In short, blow a KISS (Keep it simple silly) for the user, and they may kiss you back.