Have you tried to use a fast blur (like StackBlur for example : http://www.quasimondo.com/BoxBlurForCanvas/FastBlur2Demo.htm... , the radius should be computed according to the ratio between original size and target size) as a first step before taking the classic nearest neighbor ?
And also try to make an algorithm that resize to multiple resolution at the same time could improve speed
I take an image of 2560x1600 pixels in size and resize it to the following resolutions: 320x200, 2048x1280, and 5478x3424