In my opinion. Keep the data as it is, don't try to make subcategoryes or a lot of joins. Use where by time and IF it's possible retrieve just a small amount of the data. Using subcategory stuff will decrease performance because the table is queryed on the server doing a lot of seek and locates and the data that you get to the client it's the same. That will make it smaller but harder to manage and time consuming for querying.
Thanks for reading that much,
Ionut