Forma corretta di millis()

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();
  }
}