Manipulating a query

You might try to add a posts_where filter in your pre_get_posts hook:

function my_pre_get_posts( $q ){
    if( $q->is_main_query() )
        add_filter( 'posts_where', 'my_posts_where' );

    return $q;
}
! is_admin() && add_action( 'pre_get_posts', 'my_pre_get_posts' );

where

function my_posts_where( $where ){

    // your custom replacements on the $where string
    // ...

    // remove the filter           
    remove_filter( current_filter() , __FUNCTION__ );

    return $where;
}