Hi,
The Characteristic / Variants way is closest, as this handles all the product aspects, and updates the price when a variant is selected (and before it's added to the basket). The problem with just using variants is that I end up with too many variants, and use up all the php memory allocation (it's easy to end up with over 200 variants).
My approach is to use the variants for the product characteristics that aren't linear in pricing, and then use custom fields for elements that are (linear). Eg, for a product, pages and quantity will not be linear (as the unit price decreases in a non-regular manner as quantity goes up), so these I deal with in variants.
Then paper quality, special finishes are linear, for example adding (eg) 10% to any particular product / pages combination, so these can be dealt with using the custom field option and a custom price plugin. This way, I can keep the total number of product variants manageable (Nicholas commented elsewhere on the forum that this was the way to deal with too many variants, as it's not really a situation that the variants set up is meant to handle).
The option / characteristic route doesn't really help either, as the option-variant is either a straight additional price (eg +£10), whatever the quantity, or we could use the % of main product price route, but this is a % of the "option product" not the product that I've allocated the option too (using the Hikademo as an example, it's a % of RAM rather than a % of the computer price).
I'm so close, as Hikashop deals rally well with every other aspect that I need, it's just finding a way to get the price to update taking into account the custom price adjustment, in the same way it does for variants.
Thank you though, I appreciate it.