1) As long as you only have two levels of categories, I think that is fine
2) I think that sounds like a good solution
3) This makes sense
4) I wouldn't add both fields to the products table if you can look up the main category from the subcategory table... seems redundant. I'd probably just add a "none" subcategory to each main category to make sure everything has a subcategory in the database.
5) Yes that would work