No need to turn the raster into polygons or vector data.
You'll want to do it in multiple passes. First you want to resample the lower resolution dataset to as close as you can get and a multiple of the higher resolution dataset using bilinear interpolation which should get you a better looking resampling. Then do the merge as normal using your nearest neighbor (which I think gdal_merge.py can only do anyways).
For the first step you'd need to use gdalwarp with the -r bilinear
or -r cubic
option. This will get you a decent resampling to continue on with your merge. gdalwarp can also do the nearest neighbor if you wanted to use that in your second pass.