When you have the ability to specify the length to be indexed for index segments, you can index very large char-based columns, yet not completely. Nevertheless, the index would help speeding things up when there's plenty of searches in the WHERE clause for smaller strings.
Example syntax (taken from MySQL);
CREATE [UNIQUE] INDEX index_name
ON tbl_name (index_col_name,...)
col_name [(length)] [ASC | DESC]
Obviously, when you specify the length, it cannot be a unique index.
The difference between this index and an expression based index (eg: SUBSTRING(1, 10) to index the first 10 chars), is that with this index you don't have to use the same expression in the WHERE clause. For large char-based columns that cannot be indexed (eg: 10000 chars), this can help speeding queries up because it can actually use the data that exists in the table (and index).
RDB$INDEX_SEGMENTS should have the specified length for the segment and NULL otherwise? :-)