Sort entries in a category or entries field?
To order the products you'd make the Products section into a structure and display the category you were sorting by in the listing as a table column.

You can then re-order all products to be in category order (using the table column), then re-order each product for each category. 

You can then output each product grouped by category with something along the lines of:

{% for cat in categories %}

  {% set products = products.relatedTo( cat ) %}

  {% for product in products %}

    {{ product.title }}

  {% endfor %}

{% endfor %}