Here's one approach that I think will work for your situation. It may not be entirely optimal performance-wise (it creates multiple sharing paths for some users). In the context of your real role hierarchy, you could do some further analysis and optimization.
Suppose we have three organizations, Sales, Support, and Marketing. Each has a VP with their own Role (VP-Sales
, VP-Support
, and VP-Marketing
). There are analogous Director and Manager Roles under each in the hierarchy (Director-Sales
, Manager-Sales
, and so on).
Now, the Director-Sales
works with both the VP-Sales
and VP-Support
, and the Director-Marketing
works with both the VP-Sales
and VP-Marketing
; we want to expose their entire record hierarchies to both VPs.
We create Public Groups "Sales and Marketing Leadership" and "Sales and Support Leadership". Each group contains the two VPs in question. Then, we create one additional Group per leadership grouping, containing all of the Roles subordinate to the directors in each grouping. So we'd have "Sales and Marketing Roles", for example, containing the roles Director-Sales
, Director-Marketing
, Manager-Sales
, and Manager-Marketing
, and so on.
Then, we create one Owner-Based Sharing Rule for each of those role groups, for each sObject whose visibility needs to be shared. The rule shares records owned by members of the public group (e.g.) "Sales and Marketing Roles" to members of the public group "Sales and Marketing Leadership".
This example just shares Leads.
I tried this structure out (to the extent possible in a two-user scratch org) and I think it hit the mark you're trying for.
An alternate and simpler solution, if it's applicable to your situation, would be to give the VPs View All permissions and narrow them via Reports that are filtered on other record values. For example, if VP of Sales can get what she needs from a Report or Dashboard filtered by Opportunity Record Type and doesn't need to worry about record visibility, that's an easy solution.