WP_User_Query
only accepts a single ‘role’ argument, and since your array has the same key twice only the second is getting used:
array(
'role' => 'vendor',
'role' => 'freevendor',
);
Is the same as:
array(
'role' => 'freevendor',
);
You could make two calls, one for each role set:
$user_query_args = array (
'role' => 'vendor',
'orderby' => $orderby,
'order' => $order,
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'pv_merchant__experiance_dropdwon',
'value' => $_POST[ 'pv_merchant__experiance_dropdwon1' ],
'compare' => 'LIKE'
),
array(
'key' => 'pv_merchant_specialization',
'value' => $_POST[ 'pv_merchant__experiance_dropdwon2' ],
'compare' => 'LIKE'
)
)
);
$vendors = new WP_User_Query( $user_query_args )->results;
$user_query_args['role'] = 'freevendor';
$freevendors = new WP_User_Query( $user_query_args )->results;
And then combine the two result sets. Or take a look at the comment that shows how to write a meta query combining the two roles.