EDIT: After I do this, the physics of the enemies get weird. It becomes extra bouncy… I can’t understand why…
EDIT 2: Turns out I was using self:applyForce( sx/len, sy/len, 0, 0 ) and I should have used self:applyForce( sx/len, sy/len, self.x, self.y ). The enemies were rotating like crazy and that was the reason of weird physics results! 
Final Edit: Okay, this is the code that is working nicely, and I haven’t noticed any performance issues even with 10+ objects are in collision. Here it is if anyone needs it:
if event.other.name == "gravitySphereSensor" then if event.phase == "began" then if(self.gravityForceTimer ~= nil) then timer.cancel(self.gravityForceTimer) self.gravityForceTimer = nil end self.gravityForceTimer = timer.performWithDelay(20, function() local vx = event.other.x - self.x local vy = event.other.y - self.y local len = math.sqrt(vx \* vx + vy \* vy) local sx = (vx/(len \* 2)) local sy = math.abs((vy/(len \* 4))) local xVel, yVel = self:getLinearVelocity() local speed = math.sqrt(xVel \* xVel + yVel \* yVel) if(speed \< 550) then self:applyLinearImpulse( sx, -sy, self.x, self.y ) end end, 0)