In the case where each user has a distinct set of products they own/manage, a single table can be partitioned later on. As others suggested, you should not worry about performance unless you expect tens of millions of products.
I'd suggest starting off with a single table. If the product schema is identical for each user, this is a very simple and efficient design.
However, if products related to different users require different schema, you could end up with a very sparse table (a lot of empty/NULL fields in each record, which will affect performance for everyone).
One common approach to this is an EAV (Entity-Attribute-Value) table, which has three columns: product id, attribute name, and attribute value. This is a completely dynamic solution and is very simple. However, it makes implementing declarative constarints difficult.
My preferred approach for a dynamic schema is to make the static/always required fields part of the permanent/table schema. The dynamic part can be created as an XML field and constrained by an XML schema (or a collection). Data integrity can be enforced well in this way and you only require a single field for the extra bits.