Poor Performance from ABS in WHERE
You indexed the value of width1 but then you added another number to it and did the absolute value of that.  The value has changed so much that the system no longer knows how to associate that to the index.  

The answer here is to not do any math on width1, height1, width2, height2 but instead to do it on width and height only since those are passed in (not indexed values).  This query isn't any prettier but it should turn to your indexes at least.

SELECT id, width1, height1, width2, height2
FROM mytable
WHERE 
    (
        (width1  between (width-10) and (width+10) 
            AND height1 between (height-10) and (height+10)) OR
        (width1  between (height-10) and (height+10) 
            AND height1 between (width-10) and (width+10)) OR 
        (width2  between (width-10) and (width+10) 
            AND height2 between (height-10) and (height+10)) OR
        (width2  between (height-10) and (height+10) 
            AND height2 between (width-10) and (width+10))
    )


Even better would be to pass in height_min, height_max, width_min, width_max (instead of just height and width) and then you don't have to do the math on every row:

SELECT id, width1, height1, width2, height2
FROM mytable
WHERE 
    (
        (width1  between (width_min) and (width_max) 
            AND height1 between (height_min) and (height_max)) OR
        (width1  between (height_min) and (height_max) 
            AND height1 between (width_min) and (width_max)) OR 
        (width2  between (width_min) and (width_max) 
            AND height2 between (height_min) and (height_max)) OR
        (width2  between (height_min) and (height_max) 
            AND height2 between (width_min) and (width_max))
    )