Hmm. Well, the point of normalization is to avoid having duplicate data. It isn't really to get caught up in insanely complex database tricks or storage formats. So free yourself from that limitation, you're not beholden to it.
Having said that, I would make details such as email, phone, address, and so on, tied to each person/institution/other. I would not normalize that data. Here's why: you have 2 people and a school that are at the same address. Being normalized, you would assign them all the same address id (say, "255"). Then you would have an address table, and at id 255 you would list the address just once. That's brilliant, saves space, and allows for a single update to the address to be used by all 3. The problem is that you don't want all 3 to get the update. If people are roomates with a shared address, and one moves out and changes the address, you don't want the address to change for the person who stayed. You don't want a person who lives at a school's address to graduate, move back home, change his/her address, and end up inadvertently changing the school's address too.
Because of this, you pretty much need to avoid normalizing that data. If 2 people have the same address, it'll have to be in your database twice. Because eventually, 1 of those 2 people will move.