You can't design a schema to cope with every possible eventuality, so don't try. Couple of options:
- Design for what you know now. Revisit and modify when new requirements emerge.
- Use an EAV model to extend the entities which require a flexible property bag of additional fields. You can use a traditional normalised model for the common/base attributes and EAV for expansion.
For a use case such as yours there's a good argument for reading the user profile attributes once per session and caching until exit. This avoids the major EAV caveat, crappy performance.