Your OR is causing each row to be reviewed individually.
If speed is an issue, consider creating another field when records are inserted or updated, an indexed TINYINT = 1 if cat1 or cat2 =774
INSERT INTO sometable SET search774=if(cat1=774 OR cat2=774, 1, 0)
ALTERNATIVELY
do 2 selects
Select * from ds_products where catID = '774'
read all the returned rows into an array
then
Select * from ds_products where cat2ID = '774'
read all the returned rows into that SAME array
Now you have OR'd the records
And those will use indexes and be fast