Grouping entries by category - most efficient approach
One improvement I think could be made is to fetch only the ID's of your hotTubs entries at the start of your code. You're only using this to get the related categories and fetching ID's is faster than fetching the actual elements. The relatedTo parameter works perfectly with ID's. So that could speed up things.
You can drop the orderBy parameter also as this doesn't have any effect there.

{% set hotTubs = craft.entries()
  .section('newHotTubs')
  .ids()
%}