There are two ways to store a lot of parameters, as you suggested - a parameter - a column. And in the form of a separate table, where for each record from the main table there are many records in which the id of the main record, the id of the parameter type and the value of this parameter.
Both approaches have their pros and cons. When the parameters are separate and separate lines, but the column with the parameter value is only one, an index can be constructed from this column and instantly find the id of the necessary records by the parameter value. On the other hand, when you just need to show all the parameters for a particular product, the selection of each parameter starts to slow down as a separate line. If the parameters are a hundred - it is quite expensive.
When you approach, a sample from the table of goods by product id will be instantaneous, all parameters are in one record, it means that in one disk operation we get everything we need to know about the product. It is perfectly. BUT on 100 columns it is impossible to build indexes, because each additional index takes up a lot of disk space and slows down the insertion of new records, because when inserting a record, each index must be partially rebuilt. And since we leave columns with parameter values without indices, any search for them will be forced to read the entire table from the disk. In addition, with this approach, when adding a new parameter, you need to add a new column, explicitly indicate it in the samples, and it is possible to mention it in different parts of the code.
There is a third approach. Store attribute values in columns and records in a separate table. To search by parameter values, a separate table is used. And when you show a particular product data is taken directly from the main record. Yes, this approach introduces data redundancy. When changing any parameter, it must be changed in two places. In principle, this can be done with triggers for reliability. The changes will be a little longer than when working with only one table.
In general, the truth is somewhere near , you need to find a balance. It is possible to keep a part of attributes in two places, and to keep some minor parameters only in the search table, but not in the main one.