Fifty boolean fields is plausible enough. But you could use bitfields instead. A thirty-two-bit integer can store thirty two boolean values.
To set bit #7 in a bitfield to true you can go:
$bitfield |= (1<<7);
(counting bits from the right starting at zero: 1<<7 is "one times two to the power of seven", or 128. Writing that in binary, padded out to 32 bits, it's 00000000000000000000000010000000).
To reset it to false it's
$bitfield &= ~(1<<7);
And to see what value it is
if($bitfield & (1<<7))
{true}
else
{false}
(Noting that it really is '&' and not '&&').
Instead of messing with (1<<7) all the time and wondering what it means, you can use define() to give the bits decent names
define('SOME_KINDA_CHECKBOX', 1<<7);
If there is a reasonable way of dividing the checkboxes into groups, each group could be stored in its own bitfield.
Presumably MySQL offers enough arithmetical functions that you can do the same things within the WHERE clauses of SELECT statements as well.