What database structure is best for this?
Use a table where email is a varchar. You should use utf8 so that people can use funky characters in their email and it is handled correctly.
What is the best way to store the emails that is not visible to everyone who hacks into the database?
You can hash the values using md5 and a 'salt' - a salt is just some extra stuff (in this case a string) to add a little more randomness to the results. This way if someone knows the hash and an original email address, they can't simply figure out the hashing function you used.
Then, if you want to see if an email address already exists - take the one provided, add the salt, do the hash, check if that value is in the db.
If you do this, you know how long the hash is so you can make it a char with the correct length. This will make indexes/queries faster.
That said, there is little reason to do this for email addresses. Passwords should always be stored hashed. An email address is a public thing though it it's not "bad" if someone else knows it. It is "bad" if someone knows a person's password.
A bit more info though, you should do as much as possible to prevent people from hacking your database. If they can hack your database, they may also be able to hack your code. If they do that, they can see your hash function and salt.