If I could vote up - I would vote up Jon Skeet's answer. To add on to it your #1 and #2 are exactly identical as shown here in IL:
.method public hidebysig specialname instance string
get_SomeConstant() cil managed
{
// Code size 11 (0xb)
.maxstack 1
.locals init ([0] string CS$1$0000)
IL_0000: nop
IL_0001: ldstr "string that will never change"
IL_0006: stloc.0
IL_0007: br.s IL_0009
IL_0009: ldloc.0
IL_000a: ret
} // end of method Class1::get_SomeConstant
Option #2:
.method public hidebysig specialname instance string
get_SomeConstant() cil managed
{
// Code size 11 (0xb)
.maxstack 1
.locals init ([0] string CS$1$0000)
IL_0000: nop
IL_0001: ldstr "string that will never change"
IL_0006: stloc.0
IL_0007: br.s IL_0009
IL_0009: ldloc.0
IL_000a: ret
} // end of method Class2::get_SomeConstant
Now looking at option #3. Number 3 is very different from #1 and #2. The reason for this is, as previously stated, #3 is static since const is static. Now the real question would be to compare apples to apples in that what if #1 and #2 where static accessors? Then they would be more comparable to #3. Currently you would have to initialize a class for option 1 and 2, but not for #3. Thus there is an unnecessary initialization of an object in this case and you always want to use static whenever possible because of to avoid just that.
Now lets look at number 3 in the IL:
.field public static literal string SomeConstant = "string that will never change"
So, for efficiency, I would use #3. This is also what I have been taught by many talented peers over the years.
Now, to address the white elephant in the room. Readonly and const differ in that cont occur at compile time and readonly occurs at run time. Static readonly is initialized once, while nonstatic readonly is initialized once per instance. If, for example you are asking your question to do something like create a class of const strings for error messages that will never change then use option #3 and not readonly static or otherwise. Think of trying to initialize hundreds of error messages at run time instead of at compile time, you will see a noticeable performance difference. Also, since you state clearly that it is a "string that will never change" readonly should not even be considered in this case because "...it will never change". Const and ReadOnly have their places, but readonly is not for items that will never change and are known at compile time.