This doesn't exactly answer your question, but I feel it's relevant information. I did something similar, but I also didn't like using the kill switch. In another iteration I used a TrustedRedirectResponse which allowed me to handle my cache issue differently. This worked well for me. My understanding is this is forcing browsers to always bypass cache when executing the redirect, but the Redirectredirect itself is cached in drupalby Drupal until $entity's (my cache dependency) cache is invalidated.
$response_headers = [
'Cache-Control' => 'no-cache, no-store, must-revalidate',
];
$response = new TrustedRedirectResponse($url, '302', $response_headers);
// In my case $entity is a content entity where my redirect $url is generated.
// In your case you'd add cache dependencies relevant to determining shouldIRedirect().
$response->addCacheableDependency($entity);
$event->setResponse($response);