Move some posts to end of sort order, even if there is a sort in the wp_Query already

Yeah, so:
First: you should not use query_posts. No, not even if you need ajax pagination. However, this is not your current problem.

To be able to sort the “price on request” Properties to the end of the list regardless of the price-sorting, you simply need to save the “price on request” information in another meta field. The reason you need to do this is the following: pagination. Let’s say you got 20 properties, and 10 of them are “price on request” or “0” in your case. The moment you sort price by lowest to highest, your database request will return ONLY price on request properties, even though there are some with prices.

So what you need to do is sort them right within the database query.

Step 1:
Save the “price on request” information in another meta field. Let’s call it “priceonrequest”. I would recommend using a checkbox in the backend, but i don’t know how you build your meta inputs, and checkbox meta fields can be tricky, so let’s say you use a text input. You enter 0s for “normal” properties and 1s for “price on request” properties.

Step 2: Throw out the meta_key attributes. meta_query is the stuff you want to use.
Change the upper part of your function to this:

function property_filters(){
        //*
        // Sort by Args
        //*
        $args = array(
            'posts_per_page' => 9, 
            'post_status' => is_user_logged_in() ? array('publish', 'private') : array('publish'),
            'paged' => $_POST['page']
        );
    if(isset($_POST['sorty_by'])){
        $sortby = $_POST['sort_by'];
        switch($sortby){
            case "price-desc":
                $ascdesc="DESC";
                $meta_query = array(
                        'price_on_request' => array(
                            'key' => 'priceonrequest',
                            'compare' => 'EXISTS',
                        ),
                        'price' => array(
                            'key' => 'price',
                            'compare' => 'EXISTS',
                        ),
                    );
                    $args['meta_query'] = $meta_query;
                    $args['orderby'] = array(
                        'price_on_request' => 'ASC',
                        'price' => $ascdesc
                    );
            case "price-asc":
                $ascdesc="ASC";
                $meta_query = array(
                    'price_on_request' => array(
                        'key' => 'priceonrequest',
                        'compare' => 'EXISTS',
                        'type' => 'numeric',
                    ),
                    'price' => array(
                        'key' => 'price',
                        'compare' => 'EXISTS',
                        'type' => 'numeric',
                    ),
                );
                $args['meta_query'] = $meta_query;
                $args['orderby'] = array(
                    'price_on_request' => 'ASC',
                    'price' => $ascdesc
                );
            break;
            case "bedrooms-desc":
                $ascdesc="DESC";
                $meta_query = array(
                    'bedrooms' => array(
                        'key' => 'bedrooms',
                        'compare' => 'EXISTS',
                        'type' => 'numeric',
                    ),
                );
                $args['meta_query'] = $meta_query;
                $args['orderby'] = array(
                    'bedrooms' => $ascdesc
                );
            break;
            case "bedrooms-asc":
                $ascdesc="ASC";
                $meta_query = array(
                    'bedrooms' => array(
                        'key' => 'bedrooms',
                        'compare' => 'EXISTS',
                        'type' => 'numeric',
                    ),
                );
                $args['meta_query'] = $meta_query;
                $args['orderby'] = array(
                    'bedrooms' => $ascdesc
                );

            break;
            default:   
            break;
        }
    }
    query_posts( $args );
    //...

Your results will be sorted by the “priceonrequest” field ASC first (so the “Price on Request” properties will be the last ones no matter what) and THEN by the price field (which will now be nicely sorted).

You can read more about the Meta Query here: https://developer.wordpress.org/reference/classes/wp_meta_query/

and about the ordering here: https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

Disclaimer: I did not test this code. It should work from WordPress 4.2 on, maybe i got a typo in there somewhere.

Happy Coding!