Custom user preferences storage

I'm creating a new add-on that will include some user preferences.
Let's say each user can select multiple categories from a list of all content categories.

My goals are:

  • the users preferences must be persistent (maybe OK to have them still here if I reinstall the add-on)
  • the register and personal preferences pages to remain the same. I will have a custom view - form to update the preferences related to this add-on.
  • easy to index the values in a custom catalog. The catalog will be used to search users interested in a subject (Example: my_custom_catalog.query(subject="Education") -> list of brains containing users data subscribed to "Education" topic). The catalog is removed on uninstall and updated when a user changes his preferences.

Can you recommend the best way to store this data? Can I use memberdata without changes in register and personal default forms? Or better to use persistent objects (import persistent)? (Any example very appreciated.)

It seems simple using memberdata. I added an example here:

Plone Foundation Code of Conduct