How to render very high resolutions without running out of memory?
If you want to render scenes that require more memory then your system has, I think your best option is to render the image in sections (tiles).

I think there are more then one script to do this, but I found one here:
    http://blenderscripting.blogspot.com.au/2011/07/calculate-tile-render-ratio-snippet.html



Update: made an improved version of the script linked above:

This uses environment variables so you don't have to do manual edits to the file to change settings.

Example usage:

TILE_X=10 TILE_Y=10 PERCENT=1000 blender -b /path/to.blend -P render_tiles.py


You can also save the file with very high resolution and omit the PERCENT var(which will be set to 100).

Once completed, the montage command to join the images is printed.
This depends on ImageMagick's montage command, eg:

Run this command to join images:
    montage -tile 10x10 -border 0 -mode concatenate '/tmp/render_*.*' final.png


Heres the script: render_tiles.py

def main():
    import os
    import bpy
    from bpy import context

    scene = context.scene
    render = scene.render

    tiles_x = int(os.environ.get("TILE_X", "4"))
    tiles_y = int(os.environ.get("TILE_Y", "4"))
    resolution_percentage = int(os.environ.get("PERCENT", "100"))

    slice_x = 1.0 / tiles_x
    slice_y = 1.0 / tiles_y

    # use border and crop
    render.use_border = True
    render.use_crop_to_border = True

    # set resolution percentage
    render.resolution_percentage = resolution_percentage

    filepath_orig = render.filepath

    # track progress
    tiles_done = 0
    tiles_total = tiles_x * tiles_y

    for div_y in range(tiles_x):
        for div_x in range(tiles_y):

            render.border_min_x = slice_x * div_x
            render.border_max_x = slice_x * (div_x + 1)
            render.border_min_y = 1.0 - (slice_y * (div_y + 1))
            render.border_max_y = 1.0 - (slice_y * div_y)

            cell_name = "%04d_%02d_%02d" % (tiles_done + 1, div_x + 1, div_y + 1)

            render.filepath = "%s_%s" % (filepath_orig, cell_name)

            bpy.ops.render.render(write_still=True)

            print("Rendered %s (%d of %d)" % (cell_name, tiles_done, tiles_total))

            tiles_done += 1

    print("Finished: %d tiles" % tiles_done)

    print("Run this command to join images:")
    print("    montage -tile %dx%d -border 0 -mode concatenate %r final.png" %
          (tiles_x, tiles_y, bpy.path.abspath(filepath_orig) + "*.*" ))


if __name__ == "__main__":
    main()