I would prefer the simplest possible solution that the customer could accept, so I would do the following. I would provide two office field in the office dimension:
- Office_as_today
- Office_original
(of course you have to pick names that are good for your customer) At the start the two fields would be set equal. When two office merges I would go back in the two original offices and update the Office_as_today field, with the name of the merged office.
The new facts (from the merge on) will be registered with a new row with the two fields again equal.
The solution is very simple and fulfill almost all the requirement, with the exception of being unable to follow the original offices after the merge (here I underline your "at least").