So I noticed a problem with the code in this section. You are always adding positive values when the velocities may in fact be negative. Meaning if your ball has a Y velocity of 2f and you add a value of 2f, the Y velocity is now 0, thus you are actually slowing the ball down.
I modified the code a little bit and came up with my own solution (note that this is also coded in Unity 5):
if (Mathf.Abs(GetComponent<Rigidbody2D>().velocity.x) < 1.5f)
{
// Copy the current values into a new Vector2 to make it possible to modify individual values directly
Vector2 tweak = GetComponent<Rigidbody2D>().velocity;
// Randomly generate a float between 12, then multiply it by 1 if the current velocity is positive or 1 if the current velocity is negative, then add it.
tweak.x += (Random.Range(1.0f, 2.0f) * Mathf.Sign(tweak.x));
// Set the ball's velocity to the new value
GetComponent<Rigidbody2D>().velocity = tweak;
}
if (Mathf.Abs(GetComponent<Rigidbody2D>().velocity.y) < 1.5f)
{
Vector2 tweak = GetComponent<Rigidbody2D>().velocity;
tweak.y += (Random.Range(1.0f, 2.0f) * Mathf.Sign(tweak.y));
GetComponent<Rigidbody2D>().velocity = tweak;
}
if (Mathf.Abs(GetComponent<Rigidbody2D>().velocity.x) + Mathf.Abs(GetComponent<Rigidbody2D>().velocity.y) <= 5.0f)
{
Vector2 tweak = GetComponent<Rigidbody2D>().velocity;
tweak.x *= Random.Range(1.3f, 1.5f);
tweak.y *= Random.Range(1.3f, 1.5f);
GetComponent<Rigidbody2D>().velocity = tweak;
}
Essentially what this does is:

Check to see if the absolute value of the X velocity of the ball is < 1.5. This gives us a range of velocity from 1.5 to 1.5. If the velocity of the ball is in this range, then we find a tweak value between 12, and add it to the velocity if it’s positive or subtract it from the velocity if it’s negative. This basically means you’re always moving the velocity of the ball farther away from 0.

Do the same for the Y velocity of the ball.

If the total combined absolute value of the velocity is still less than 5 then we multiply both x and y values by a range from 1.31.5. These are arbitrary values I found to work well. This keeps the ball moving at a good pace and prevents gameplay loops where the ball is staying very vertical or horizontal.
It’s not perfect, but it avoids the problem I mentioned at the start and I’m pretty happy with it after some play testing.