You can group contracts on the same invoice based on the customer the contract is assigned to (#2) and the bill to the contract is assigned to (#3) and the bill group the contract is assigned to (#1). If all of these fields match, you can group the contracts together on one invoice if you push them into the billing queue at the same time within your billing tolerance range (#4).
Your contract Billing Groups are listed under Tools/Lists and Codes. You can create them based on whatever identifying actor you would like. i.e. the cycle of the contract (Monthly), the type of contract (Silver), the type of customer (Government), whatever you like. The bill group is just the identifying factor to look for other contracts that have the same bill group. Then, before it will group on the same invoice, it looks for matching customer and bill to cutomer. If those match along with the bill group it will group them on the same invoice when in the billing queue at the same time.
(#4) Your billing tolerance range is the amount of days from the current date that you can push your billing cutoff date to in your contract billing queue for the contract to bill. When grouing invoices you have to make sure that the contract bill dates you are grouping are within this range and pushed to the billing queue at the same time. i.e. One contract bills on the 10th and the other one you want to group it with bills on the 20th. If your billing tolerance range is 10 days then this can be accomplished by pushing them into the billing queue at the same time.
Also, it's a little known fact that grouping your contract invoices will also group the meter requests into one email!