I guess there is not "the one and only" solution what helps me a lot is thinking about the "tables"/"visualizations" I want to create and then look what data I need to get there. everything mainly depends how important the search is ...
searches
since the main goal is to report the search term and the according number of results (per category), I would use the following data
eVar1 - search term
listProp1 (traffic variable with list support, not listVar) - name and number per category ( eg. "websites:32,places:4")
event1 - total search results
event 2&3 - search results per category (if you really need them)
event4 - search counter (one per search)
using this setup allows a lot of reporting like what search terms (eVar) had what results (events) and averages (calc metrics on events). you can even break down by category.
results
focus on the result item and think of sending all information in a single eVar (or 2) and then use "classification" to get single items out. I would use those elements:
eVar2 - combined string of search result (eg. "website|nameXY|topicXY|" or "place|nameYZ|topicYZ|regionYZ"
if you want you can seperate eg. the first part in amother eVar...
event5 - counter for search clicks
event6 - click position within category (to calculate average position clicked, optional)
this setup is both flexible and allows to report on a lot of things. the difference to your proposal is mainly to concatinate the single eVars in one string and then use classification to get the single items...
hope that helps