If you must do this, do it in a separate table that you can later join to the original table. If you must, you can use an EAV structure, but be aware that the flexibility to add n columns has a very large performance hit. I'm talking really truly unacceptable performance in many cases and the more records the worse it gets. Do not go down this route unless you are sure you have no other choice.
Anothe route is to take them at their word and add a table with five columns labeled col1, col2, col3 (and whatever other columns you need to link to the user and/or other data table)and let them add data to those columns. If each user is going to name them something different, you might need a cross refernece table to use to figure out the column names.
You could put the data into a an xml field but how are you going to query this later? You really need to figure that out before you decide on a way to handle.
In general this level of flexibility is a poor idea. Five different users will each add five different columns that contain simliar data that you will want to query together but becasue they each used a different name, you have a mess instead of a database. If you have to have customer designed columns, try at least to get one admin per customer to do the adding of the columns, not users on the fly as they think of something nice to have.