Creating a sensible default pattern of digging that works in most cases is hard. That works always - impossible. The system would have to think for you and know what you want... Maybe just add designation "priority" or "tier" or "order". Designations with lower priority only get done after all the things with higher priority. + raises, - lowers priority when in designation menu. So you designate the first "stage" of digging, hit -, designate the second, etc. Maybe have it change color of designation tiles. So you designate the whole job in stages, then go manage something else without having to return and micromanage designations. If you have to dig some rooms for immigrants and the diggers are busy with the megaproject - designate the rooms with higher priority than any stage of the project and digging will start imediately. If there's no hurry - designate with lower priority and digging will start when the project is finished.
The only problem is sometimes you won't be able to designate the whole job in tiers, for example if there's a tile to be channeled with a tree on it. You can designate to chop, but until it's done can't designate to channel with lower priority. Or you need to channel a lake drain, then wait for it to drain, then dig into the bottom you still have to manage digging manually.