Part of benchmarking is counting the number of storage reads and writes that happen in the runtime storage, because the runtime storage is a merkle trie, and operations on the merkle trie is very expensive.
Whitelisting in this case is a way to tell the benchmarking backend to ignore certain keys, for example user accounts, or specific kinds of storage items, so that accessing those keys do not consume a storage read or write.
We can do this because if you access the same storage multiple times within a block, a storage cache is used rather than the actual database, so only the first access to a storage is heavy, compared to every access. For example, since the block number is a storage item that is read and written to each block, we can ignore any reads or writes to the block number in other extrinsics.
You know the logic of your blockchain best, so these tools are made available to developers in order to control the output of benchmarking, and accurately represent the complexity of their logic on chain.