Dictionaries in general are built on top of trees, most commonly, self-balancing trees. The most commonly used are Red-Black trees and AVL Trees, you should start there.
Going through your demands (I'm considering the case, where the word is a key (index), description is data pointed by that key):
1. It should me possibly to add/remove word - check, you add and remove node from tree.
2. It should be possible to modify description - check, description isn't indexed, so when you find one, you can do whatever you want with it, without changing the tree iteself.
3. Quick access - check, you have log2(N) access, tree stays balanced (hence - it's self-balancing tree).
4. Some descriptions can be half-empty - Description is just a data connected to node, it can be empty, or anything you like, that doesn't change anything inside a structure.
5. Filtering words on the basis of some information - I don't get this one, the filtering stuff can be implemented by copying the tree, but without words you want to get filtered, therefore you will get another tree, that has only those words that you want (and descriptions won't be copied).
Edit: One thing you should know - implementing those trees well, isn't a easy task. It's very easy to get a bug or two, you should be checking correctness of your implementation on every step. Also, if you want to get deeper, and into more structures, you might want to read Knuth's.