One of the options would be to create two versions of each product - one for B2C, one for B2B. Then, assign each of those versions with tags, be it B2C or B2B.
Then, I suppose your clients do have an accounts with you - assign business accounts with tags, too, but to save some time assign just B2B, if you like.
If I am right, then you will only have to change some coding in one file: product-grid-item.liquid (might be called different)
Something like this would do:
{% if customer %}
{% if customer.tags contains 'B2B' and product.tags contains 'B2C' %} hidden
{% elsif customer.tags contains 'B2C' and product.tags contains 'B2B' %} hidden
{% endif %}
{% elsif product.tags contains 'B2B' %}
hidden
{% endif %}
Not the cleanest and easiest way to do, but should work :))
Basically, what you do, is go to that file mentioned above and insert this code into CSS styling of your product div. It will make B2B products hidden for B2C accounts and vice-versa, and will hide all B2B products for those without the account