No (purché la condizione abbia senso).
Il tempo gestibile con millis "in un colpo solo" è di circa 1192 ore (con un errore di circa 5 secondi all'ora).
Si, però è meglio tenere tutta la logica del lampeggio dentro la stessa funzione:
void loop() {
switch_sw = digitalRead(slidersw);
blink(switch_sw == HIGH);
}
void blink(bool x) {
if (!x) {
t0 = millis();
digitalWrite(ledrosso, LOW);
digitalWrite(ledverde, LOW);
} else {
if (millis() - t0 <= 5000) {
digitalWrite(ledrosso, HIGH);
digitalWrite(ledverde, LOW);
} else {
digitalWrite(ledrosso, LOW);
digitalWrite(ledverde, HIGH);
}
if (millis() - t0 >= 20000)
t0 = millis();
}
}