In my opinion the best way to achieve what you want is to use custom fields and meta query linked with a WP Query and Ajax. You can find the documentation here : https://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
An example of a WP_Query with meta_query :
new WP_Query(array(
'post_type' => array('post_links', 'page'),
'meta_query' => array(
'relation' => 'AND',
'cost' => array(
'key' => 'cost',
'value' => '500',
'compare' => '<=',
),
'country' => array(
'key' => 'country',
'compare' => 'France',
),
'city' => array(
'key' => 'city',
'compare' => 'EXISTS',
),
),
'orderby' => array(
'cost' => 'ASC',
'city' => 'ASC',
),
));
Another way to do it as you way is another table to stock data, depends of your needs and the quantity of data you’ve to stock.