I think we should do it on the client side so we can avoid hitting region servers that does not contain any columns. This can be a huge saving as you mentioned. The way it is being done now piggybacks on the existing region filtering mechanism of Parallel iterator splitters and require very little change to other parts of the system to achieve the filtering.

I think it would always be a good idea to compress SkipScanFilter or even the whole scan if it's too big regardless of whether we are expanding or not. As seem from some of the discussion on our github (specially https://github.com/forcedotcom/phoenix/issues/115#issuecomment-16487253), I can see people programmatically generates queries for Phoenix. I think these kind of generated queries can easily generate a skip scan filter that are as big as the expanded ones. So it's more of the general problem than a specific one to the salted ranges.