I have managed to do what I need using product modifiers and some conditional template logic based on the logged in member group.
The logic checks the member group and if the visitor is a "Trade" member then it includes a hidden form field containing the option data within the products tag.
Within the {exp:store:product} tag pair...
{!-- add a price modifier for trade pricing --}
{if member_group=='6'}
{modifiers}
{modifier_options}
<input type="hidden" name="{modifier_input_name}" value="{option_id}">
{/modifier_options}
{/modifiers}
{/if}
I then display the price using:
{if member_group=='6'}
{modifiers}
{modifier_options}
{if option_name=="Trade" || option_name=="trade"}
<h2 class="product__price">Trade Price: £{exp:math formula="{price_inc_mod_val} * 1.2" decimals="2" round="up" trailing_zeros="yes"}</h2>
<h3 class="product__price--ex-tax">Ex Tax: £{price_inc_mod_val}</h3>
{/if}
{/modifier_options}
{/modifiers}
{if:else}
<h2 class="product__price">Price: £{exp:math formula="{sundries-details:price_val} * 1.2" decimals="2" round="up" trailing_zeros="yes"}</h2>
<h3 class="product__price--ex-tax">Ex Tax: £{price_val}</h3>
{/if}
The math plugin is so I can enter prices without tax in the backend but display them with taxes on the front end.
This appears to be working OK but I haven't fully tested it yet. My concern is that it requires the client to set a specifically named option. It's also a bit crappy on the UI front for the client entering prices. But I think I can get away with it.
If I can find a way to preset a product option then I'd be a lot happier.