Most database I have seen will either tack on X number of fields to a table (user 1, user1, etc) or have a child table with the same, this is the easiest method you will find in my opinion.
The downside is that you are limiting yourself and have to pick a number of fields and live with them, adding more down the road requires modifications to the database.
We recently took a different approach and implemented a solution where the user defined fields are stored in a table vertically (one row per field) and then pivoted with the TSQL PIVOT command into place. This allows an unlimted number of user defined fields with no modifications to the database later. The controls that display these user fields are generated dynamically on our forms in a flow layout panel.
We also tried storing the user fields in an XML column but had problems with performance with hundreds of thousands of records, if you volume is low it might be a good alternative.
It really depends on your needs and hopefully this gives some food for thought.
There are a lot of good topic on the net about this topic, it will in the end really boil down to your needs, there is in my opinion no one single absolutely right answer.
I would stay away from dynamically altering your table structures, you will find that suggestion out there and I think it is the only one I would not seriously consider.
Good luck!
Keith Chisarik