You should steal the technique used by bind-key*.
Basically, the bindings in minor modes take precedence over major modes, and minor modes in the emulation-mode-map-alists take über precedence. Mastering Emacs has a good outline of keymap lookup order.
Here's a sampling from my config:
(defvar my/keys-keymap (make-keymap)
"Keymap for my/keys-mode"...
If you use Icicles then just use one of these with C-x b:
C-0 (or M-0 or C-u 0 etc.): The candidate buffers will have the same mode as the current buffer
C-u: Same, but include also buffers whose mode is derived from that of the current buffer.
In Icicle mode, C-x b is bound to multi-command icicle-buffer.
And you need not choose such filtering before you ...
Emacs has no mechanism to prevent this other than convention. The convention is that all of the alphabetical keys starting with C-c are reserved for the user. You could change your key binding to C-c n and it wouldn’t be overwritten.
The other alternative is to configure hook functions in your init file so that when a buffer enters a mode that shadows your C-...
I really liked cyphejor to shorten the mode name in the mode line (I even threw in some emoji). But I missed the ability to filter by (regular) mode-name in ibuffer and other places.
So instead of activating cyphejor-mode, which actually alters mode-name, I just leave the mode off, and use its capabilities to replace the mode-name in the mode line, with ...