Arduino 1.0 Serial - major RAM hog

I agree, you should be able to use malloc().

I have been working on a personal replacement for HardwareSerial. If you only call begin(), it uses no buffers and no interrupts. Even sketches with some input work since they tend to read in a tight loop and the serial hardware has a two level input buffer register and an input shift register.

I have two calls to connect interrupts with buffers, one call that uses malloc and sets a status bit to remember to call free and one call to use static arrays in the sketch.

  bool connectInterrupt(size_t rxSize, size_t txSize); // uses malloc
  bool connectInterrupt(uint8_t* rxBuf, size_t rxSize, uint8_t* txBuf, size_t txSize);

If a buffer is zero length, the corresponding RX or TX will not use interrupts.