It is best that you make all of your time variables for a use the same size unsigned integers. The lower 8 or 16 bits of millis() and micros() returns work fine as timers with limited max intervals.
I have a button class that debounces using 8 bit time variables. They take less room and use fewer cycles.
16 bit unsigned millis() is good to over a minute, Arduino variable type is word.
The compiler might not turn our mixed-math source into what we think it will in all circumstances.
Have you seen Nick Gammon's state machine example in his tutorial on reading text without blocking? It's at the 2nd address in my sig space.