I'm not into that while (Serial.available()) waiting for Strings String readString; when all you really need is a char. I feel like you're going twice around the world for a shortcut and I feel your frustration with the Serial comms stuff - that was me when first starting out. I was convinced it didn't work correctly and then one day I came across this tutorial by Legend of Arduino, @Robin2 :
You don't want a while loop. You also don't need Serial.flush();.
I think you should be fine just passing chars to your accessory boards. If you don't plan on typing commands into a Serial monitor all the time once everything is done, there's no need to use commands like "on" or "off" when a simple char sent from the controller to the accessory boards will do. If you are pressing buttons that are read by your controller Arduino, you'll want to look at the IDE example StateChangeDetection so that the controller Arduino only sends out a char message to one of the accessory Arduinos if the button state has changed, so you're not spamming the Serial comms when that control button is just idle.