Create a coverage layer where all expensive estates are merged and all cheap extents are merged so you have only 2 features - make sure you have an attribute called "estate_type" and fill that with expensive or cheap.
Then in the symbol properties of your estate layers change the symbol to rule based.
Add a rule like below
attribute( $currentfeature , 'estate_type') = attribute( @atlas_feature , 'estate_type')
If the atlas is on the 'cheap' feature in the coverage layer it will symbolise all the cheap estates; when you change to the 'expensive' feature in the coverage layer it will symbolise all the expensive ones.
In your question you also want to symbolise the houses differently according to a color attribute. You can maintain any styling. Just choose your favourite symbolising and symbolize. After this you change to Rule-based styling and add the string before all rules. Your rules et will then look like this:
attribute( $currentfeature , 'estate_type') = attribute( @atlas_feature , 'estate_type') AND "housecolor" = 'yellowhouse'
attribute( $currentfeature , 'estate_type') = attribute( @atlas_feature , 'estate_type') AND "housecolor" = 'greenhouse'
attribute( $currentfeature , 'estate_type') = attribute( @atlas_feature , 'estate_type') AND "housecolor" = 'brownhouse'
The above figure is an example of how I use it. I have an ELSE rule to symbolise all other features that aren't part of my coverage layer. Leave this out if you don't want them visible.