You could try authoring the map so that setting visibility on the parent node, will give you what you want. When you set visibility on child nodes of a service it builds a cache for the nodes that are turned on, and will do this for each combination. Once cache is built up locally for each combination, when you change layer visibility, it still disconnect and reconnects to the local cache, which does stutter a bit and refresh the display.
When you set visibility on a parent level node, it doesn't change the connection to cache, or do anything with the cache, so it is much faster and smoother, and will likely meet the needs of what you are trying to do.
I have attached a map. It references the same service twice, but the visiblity of child nodes is different in each. I also changed the name in the table of contents, to match the child nodes that are turned on. Toggling the visibility of the parent nodes should give you the performance you are looking for.