Firstly, this is probably clear, but let's say it: The category business logic (e.g. fetching data from a data source) should not be in Html-helper or in a user control: it should be done in a controller.
The difference between 1) RenderPartial / HtmlHelper vs. 2) RenderAction is in which controller this business logic is:
- in the one controller action that does the whole page or
- in a separate controller action specific to the partial view.
If you use your category data in pretty much every page I do not see it wrong to fetch it for each page on page-controller action level and pass it in the view data. Of course you would use some mechanism (custom model base class, extend controller, ...) so that you don't have the same category-fetching function call in each action (assuming you have lots).
If some page views choose to show the categories, some not and some perhaps have another category control with different business logic, then RenderAction is definitely better. Even in the above case, RenderAction is good: it separates the category fetching from other data in your controller actions.
Then whether to use RenderPartial or HtmlHelper... To me HtmlHelpers should be more generic and not specific to particular view or model, but this, I suppose, is more matter of taste than clear rule from MVC perspective: both should be just View-logic.