Redirect Search to Form When No Product Results Are Found

pre_get_posts is fired before the query is run and is used to customize the query before its is run.

See here for a list of hooks, they are listed in order of execution. https://codex.wordpress.org/Plugin_API/Action_Reference

I would suggest using a hook that fires after the query is run for example, template_redirect is fired immediately after the query is run.

function no_products_found_redirect() {
    global $wp_query;

    if ( $wp_query->is_search && !have_posts() ){
        wp_redirect ( home_url('/request-quote/?product_name=" . get_search_query() ) );
        exit;
    }
}
add_action( "template_redirect', 'no_products_found_redirect' );