using grep find words that are 6 characters long from a file mywords.txt but must contain 2 characters b,d

I got the required answer but surely there is a better way to write my query?
grep -v " " mywords.txt | grep -E "(.*b.*d|.*d.*b)" | egrep "b(a-z){6}b"

also how would it be written if I needed to match more than b and d ?