I believe David mentioned the possibility of porting his Move Safely object (or an equivalent) to Construct, but that's not likely going to help you for now
I suppose you could reduce the number of steps in your loop, then back out when collision is triggered. For instance, if your player hitbox is, say, 64px wide then you can very easily move in increments of 32px and know that if there is something to collide with, then a collision will occur. At that point, run a second loop to back it up to the point of impact.
It would be much more efficient than advancing your object by 1px every time you loop.
To streamline your collisions further you can change the sprite's collision mode to Bounding Box for the first step, then if collision is triggered switch it over to Per Pixel to back it out if that's what you need. Per Pixel is a lot slower than Bounding Box (especially since Per Pixel does a Bounding Box check first, then a Per Pixel check second).