order posts by `meta_key`, Does not display posts that does not have `meta_key`

You can get all posts by using a meta_query that gets posts where the key either does or does not exist, and then order on meta key with a secondary order for posts with same value or no key:

$args = array(
    'post_type' => 'my_product'
    'tax_query' => array(
        array(
            'taxonomy' => 'my_product_cat',
            'field' => 'slug',
            'terms' => array( $category->slug )
        )
    ),
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'vip_row',
            'compare' => 'NOT EXISTS',
        ),
        array(
            'key' => 'vip_row'
            'compare' => 'EXISTS',
        )
    ),
    'orderby' => array(
        'meta_value_num' => 'DESC',
        'date' => 'ASC',
    )
);

$query = new WP_Query($args);