Fantastic! Well sort of anyway - the method you posted works (fortunately I am already jailbroken so it was relatively straighforward), though it's a shame there doesn't appear to be a method that allows it to work on a fully legitimate iPhone.
I think what is happening is that because the iPhone sees the giffgaff SIM as an O2-UK SIM, it defaults to using 901 as the voicemail number because it has carrier settings for some networks, including the voicemail number, and it presumably uses these when available. Since the iPhone carrier settings tell it that O2-UK's voicemail is 901 it uses that and seemingly can't be changed (unless you hack the O2-UK carrier.plist file).
Strangely my PAYG 3 SIM does work with the voicemail button without any messing around, and it looks like 3UK isn't actually in the list of networks that the iPhone has carrier settings for, but my guess is that when the iPhone doesn't have specific carrier settings itself, it then defaults to what the SIM tells it to use. So it may be that the giffgaff SIM does actually have the right voicemail number (111), but because the iPhone thinks it is an O2-UK SIM it never bothers to actually look for the voicemail number on the SIM - it just assumes that it is 901 as it has the carrier settings for O2-UK "on file".