why do you wait 1.5 seconds until disabling the collider again?
you could maybe try something like this
like in Update or FixedUpdate
Vector3 velocity = (transform.position - previousPosition) / Time.deltaTime;
canHitUpwards = velocity.y >= 0;
previousPosition = transform.position;
playerCollider.enabled = canHitUpwards;
// Or do this instead
Physics2D.IgnoreCollision(playerCollider, ballCollider, !canHitUpwards);
https://docs.unity3d.com/ScriptReference/Physics2D.IgnoreCollision.html
when taking the velocity that way you'd have to be careful though if you also change your Time.timeScale, since deltaTime could get zero
you could also make it so canHitUpwards is only true when the velocity of the player rag exceeds the velocity of the ball upwards as well, or optionally also include a minimal velocity required for the hit to be valid (although I wouldn't do the last part)
canHitUpwards = velocity.y >= 0 && velocity.y >= ballVelocity.y; (optionally you could do an || here, because sometimes the player rag could move downwards, but if the ball moves downwards faster, you could still hit the ball when the ball is being above even if the player rag moves downwards).
Also, another check you could do is simple that if the ball is above the rag + some tolerance distance, you know you always hit it from below