Thinking way outside the box here, but maybe this is (finally, after about 280 yrs) a good use case for ranks? Zoom level 17+ show species names, zoom 13-16 show genera, zoom 0 shows domains, etc. Ranked groups are the names most people will recognize, and they're organized to be useful collections at varying scales. Maybe some posthoc adjusting: i.e., of all the families to show in this window at this zoom, show no more than 7, and make them be the ones with the greatest diversity.
For the drawing, why not cache the generated tiles? First time someone looks at a particular area at a particular zoom, it takes a while to render, but after that the cached image is used. Doesn't take much more time on the back end and makes the app faster as it gets used. You could also have a script that pre-caches tiles in the background, depending on your overall server load.