How to cache a view for all users of a role?
To answer the question title and the comment of @Leigh, without going into the details of the complexity of the specific View:

How to cache a view for all users of a role?

Views are cached like any other rendered content. When rendered a View bubbles up the cacheable metadata of Views plugins, like filter or sorting plugins and the rendered content itself.
Additionally there are the three default contexts, as defined in the service container:
core.services.yml:
  required_cache_contexts: ['languages:language_interface', 'theme', 'user.permissions']

The context user.permissions is a hash of all of the user's permissions, which is the result of the roles assigned to a user.
So in the end a View is cached for user roles by default.