Best practice caching a variable between page loads
A) I highly recommend to measure your assumptions. Database might not be as bad as you think. The answer also depends on whether you ask for a sites that you control or whether you are writing a public module that has to play well with the whole ecosystem.

The main difference between variable_set and cache_set is how important the value is. Cache is intended for things that can be generated. Another difference is how modules interact with in. There are alternative cache backends, which won't write the value to the default database but typically some type of key-value store.

B) The $_SESSION variable from PHP can certainly be used by a Drupal 7 module. By default, PHP saves the session as a file in the local file system. 

You can also use key-value stores such as Redis or APCu.

C) A class sounds much better from the perspective of testability via PHPUnit, but singletons don't play well with testing either.