Custom query based on meta key – Reduce three states to two in results?

This can be done by providing a “default” value to the ORDER BY statement.

Try adding this before your call new WP_Query($args);:

$setDefaultOrderby = function($statement) {
    return str_replace('wp_postmeta.meta_value', "COALESCE(wp_postmeta.meta_value, 'false')", $statement);
};

add_filter('posts_orderby', $setDefaultOrderby);

and this after it:

remove_filter('posts_orderby', $setDefaultOrderby);

Change the 'false' with whatever the default value is that you need.

I am using COALESCE here, which basically selects a first argument you pass to it that is not NULL, essentially allowing you to provide a fallback for a post that has no meta key.