if you are going to use a GUITexture to detect touches, its way easier, and more accurate to use a GUI.Button, and assign to the button the image that the GUITexture has.
would cost much more performance. Any OnGUI is better avoided.
If you want to speed stuff up, use SpriteUI
As for guitexture and collision: it will likely never be correct, as guitexture / guitext aren’t meant to be used like that. You would not use any physical approach to get them but use math and the guitexture / guitext rects to check if the touch position is contained through the Contains function of rects