You're pretty much on the money with the next steps.
Identify the total number of addresses.
Then, identify the top ~10 domain groups* in that list. The rest of addresses will in most cases be distributed well enough to go into one pile that you can just select from randomly.
So you'll have 11 numbers. Those are addresses that you need to reach on each provider at the end of warmup, one target number for each domain group.
Then, for each domain group, determine the number of addresses you want to start sending with on day one.
The starting number of addresses is different for each provider.
Salesforce has some indications on US numbers on their help servers, but they differ vastly. Google e.g. is 20k I believe, yahoo around 10k, but for other countries, if unsure, start slowly. (1500 is a baseline I often use, but I've gone lower to like 300).
Make a sendout plan that increases volume gradually for each domain from the respective baseline number on day one to the full amount, keep increasing until all domain groups max out.
You can find plans online with various levels of "aggressiveness" in terms of increasing volume. You are on the safe side with doubling volume weekly for each domain group. Faster can be done, but stay safe. 4-6 weeks is a good timeframe to try and reach. In case of doubt, always go slower rather than faster.
With your plan set, create a data extension folder for each sendout day.
In each "day" folder, create 11 DEs, one for each domain group in your list (top 10 + rest).
For each DE, create a query that includes the number of addresses you want to target that day. As you already know, start with engaged subscribers and only add less engaged ones when you've exhausted the engaged pool.
===
*group domains by the company that manages them if you can.
e.g.
all yahoos + ymail;
googlemail + gmail;
outlook + hotmail + live + msn + skype etc.
===
You can get to the domain distribution by a SQL query on email using LIKE and the @ sign. TOP will help with getting the numbers you need.
Here are the base schematics for the daily queries.
SELECT TOP 10000
contactId
FROM yourBaseList
WHERE email LIKE '%@yahoo.%' OR '%@ymail.%'
This will give you 10k for yahoo for your first day.
Make sure you then control the addresses for the followup selections (when increasing volume).
E.g. at the next increase, see to it that you keep the addresses from first sendout, and add more to the sendout.
UNION is your friend here.
/* get all addresses from yahoo selected for day one ...*/
SELECT contactId
From DayOneDE_yahoo
/* ...plus 10000 new yahoo ones from your base list... */
UNION
SELECT TOP 10000
ybl.contactId
FROM yourBaseList ybl
WHERE ybl.email LIKE '%@yahoo.%' OR '%@ymail.%'
/* and make sure those are NOT in day one selection already
by using a "LEFT JOIN a&b WHERE b.key is NULL" pattern. */
LEFT JOIN
DayOneDE_yahoo d
on d.contactId = ybl.contactId
WHERE d.email IS NULL
Sendout using normal send flow and just adding the 11 DEs.
Monitor using "email performance for all domains" to observe the different behaviors.