GSM shield, Mega and extra UART.

Since GSM Shield uses SoftwareSerial with interrupts, is it possible to modify it to use Serial instead of SoftwareSerial on Mega since it have 4 hardware UARTs? Does this make the performance any better?

Since GSM Shield uses SoftwareSerial

The shield does not use SoftwareSerial. The library (stupidly) uses a variation of SoftwareSerial to communicate with the shield.

Bend some pins on the shield, add jumper wires, and rewrite the library.

Does this make the performance any better?

HardwareSerial always beats SoftwareSerial. Whether the difference is noticeable depends on how much data you are sending/receiving and what baud rates are involved.

Sending one character a week will not demonstrate a measurable performance improvement when using hardware serial instead of software serial. Sending a million characters an hour will.

PaulS:

Since GSM Shield uses SoftwareSerial

The shield does not use SoftwareSerial. The library (stupidly) uses a variation of SoftwareSerial to communicate with the shield.

Bend some pins on the shield, add jumper wires, and rewrite the library.

Does this make the performance any better?

HardwareSerial always beats SoftwareSerial. Whether the difference is noticeable depends on how much data you are sending/receiving and what baud rates are involved.

Sending one character a week will not demonstrate a measurable performance improvement when using hardware serial instead of software serial. Sending a million characters an hour will.

I think the better thing to do here is back port the interrupt capability of SoftwareSerial variant the GSM library used to official SoftwareSerial library, add the respective methods to HardwareSerial, extract a superclass from improved SoftwareSerial and HardwareSerial, and then rebase GSM library to that new Serial. When using Leonardo (2 UARTs) or Mega (4 UARTs) which have more than one hardware serial interface, bend pins and use jumper wires, and initialise GSM library with a hardware serial interface.