Label (1;) Company (1:) Person (using relations defined as labeled-company) and (working for)
Define after-commit MF on Person, retrieving and storing the label (enum) at Person lvl. req2: DB retrieve all person with the same label req3: ditto req5: having the Person-info now searchable solves this.
Remember that you can get Company info trough (working for).
Sometimes redundant storages of data helps a lot, just remember you need a mechanism to keep it synchronized (the after-commit MF)