As we discussed, a host group is like an "alias" for a set of machines. You can assigned a host to more than one group, but jobs sent to the group will only run on those machines. A cluster is a priority scheme that will allow a job to run anywhere there is an available machine, but it could get preempted by a job that has a cluster specification that matches the machine.
Since your customer wants to divide up the farm strictly so that jobs intended for machines assigned to a project can't run elsewhere (even if hosts are available), you'd use a group.
Here's how I'd set up the qbwrk.conf:
[project1]
worker_groups = "project1"
worker_cluster = "/project1"
[project2]
worker_groups = "project2"
worker_cluster = "/project2"
[project3]
worker_groups = "project3"
worker_cluster = "/project3"
[project4]
worker_groups = "projetc4"
worker_cluster = "/project4"
[project5]
worker_groups = "project5"
worker_cluster = "/project6"
[xcube1]: project1
[xcube2]: project2
[xcube3]: project3
[xcube4]: project4
[xcube5]: project5