First thing: custom fields are not only text fields. You'll likely want to add dates, booleans, arrays...
You also have to deal with privileges and mandatory fields.
The best approach I think is to have a preference table and a data table separately.
Concerning your initial fields, it will be easier to manage them as custom fields, maybe with some "system" privileges in your pref table.
Another important point is custom fields groups. Most likely, your users will ask for it so build it from the start. That's another table.
At Sellsy we added CF long after releasing the software and we would have been faster if we took all this into consideration from the ground up.