You have the right approach.
By setting a status value and coding the application so that it behaves differently based on the value of the status, you preserve the integrity of the data and get the behavior you want.
Your searches, when you want just visible entries, just have to have "WHERE status = 0" in them so you don't get the ones that are hidden.
One small change - if you are only determining whether to hide or not, a better name for the column is hide. Then the values make sense: 0 is don't hide, and 1 is do hide.