Your accumulators sound like MultiChain assets, each of which is issued by a particular retailer. If you make the asset open, the retailer that issued each asset is able to issue more later on. Once owned, these accumulators can be freely transferred and exchanged between the customers and retailers.
The clusters sound like they should be implemented using MultiChain streams, where each retailer has their own stream which only they can write to, and which enables them to tag each customer ID (which can be simply the customer's blockchain address used for sending assets) to the appropriate cluster for that retailer.
Querying the clusters for a customer is easy – any retailer's node can subscribe to another retailer's stream, and retrieve the latest entry for each customer from the stream (use liststreamkeyitems with count=1).
Querying the accumulator balance for each customer will not be so easy using MultiChain directly, because each node would need to run importaddress on every address as soon as it is first used, and there could be scaling issues with more than a few 10,000s of addresses. We would recommend implementing an external database for this purpose, and keeping the database synced with the blockchain using either per-asset subscriptions and listassettransactions, or else parsing each block's content using getblock and verbose=4.