I would not rely on support for NPOT textures, even with OpenGL-ES 2.0. Power of two texture, even if they aren't mandatory, are always better for performance reasons.
To overcome this issue, try using texture coordinates correctly. For example:
Let's say your original image is 300x500. The closest Po2 size for this texture is 512x512. We take the original 300x500 bitmap, and paint it on a 512x512 bitmap and create a texture from that. We don't scale when we create the larger bitmap, so the larger bitmap will appear to have blank edges on the right and bottom.
Normally, your texture coordinates (for a flat square model) would look something like this:
float[] textureCoords = new float[] {
0, 0,
1, 0,
1, 1,
0, 1
};
The 0 in each coordinate indicates the "beginning" edge of your texture, whereas the 1 in each coordinate indicates the "end" edge of your texture.
Now we want to "trick" the system to not render the whole texture, since any pixel greater than 300 horizontally or 500 vertically is blank. So, instead of using "1" as the end value, we use the ratio of the two images:
float w = 300f / 512f;
float h = 500f / 512f;
float[] textureCoords = new float[] {
0, 0,
w, 0,
w, h,
0, h
};
With these texture coordinates, only the relevant part of the texture will be drawn.
As JanneK pointed out, you can use this method to create 1 large texture which contains all the other textures you need, and then use texture coordinate mapping to only extract the parts you want from that texture. This will allow you to optimise your textures rather than just waste that "empty space" in the PO2 texture.
Hope this helps.