Hi,
You can create custom fields of the table "order" via the menu Display>Custom fields and that will allow the customers to fill data during the checkout.
However, it won't be per product. It will be global to the order so you would have to duplicate them and make them optional.
You could also create custom fields of the table "item" via the menu Display>custom fields and that will allow the customers to fill the data on the product page for each product.
However, you can't have fields to duplicate themselves when you change the quantity or use an option.
Also, note that these custom fields are only available with the Business edition.