Misleading error message for HDBSCAN exception

### Describe the bug

Before computing the minimum spanning tree, HDBSCAN checks if the number of connected components in the mutual-reachability graph is greater than 1. Here is the snippet - 
https://github.com/scikit-learn/scikit-learn/blob/55a65a2fa5653257225d7e184da3d0c00ff852b1/sklearn/cluster/_hdbscan/hdbscan.py#L110-L122

However, the connected components could be greater than 1 even if there are more than `min_samples` neighbours for all samples in the distance matrix. A similar [issue](https://github.com/scikit-learn-contrib/hdbscan/issues/82) was raised in the scikit-learn-contrib repo. The error message could be changed to indicate that the mutual-reachability graph might also be disconnected and hence the original distance matrix  (i.e. knn graph) in itself is disconnected, which does not work for HDBSCAN. 

### Steps/Code to Reproduce

```python
from sklearn.datasets import make_blobs
from sklearn.cluster import HDBSCAN
from sklearn.neighbors import NearestNeighbors
import scipy.sparse as sp

features, labels = make_blobs(n_samples=200, centers=2, n_features=2, random_state=42)
knn = NearestNeighbors(n_neighbors=10, metric='euclidean')
knn.fit(features)
knn_graph = knn.kneighbors_graph(mode='distance')

# Make distance matrix symmetric for HDBSCAN. Note: Distance values may not be correct here
# but it does not matter for the example
knn_graph = knn_graph + knn_graph.T

cc = sp.csgraph.connected_components(knn_graph, directed=False, return_labels=False)
print(f"Number of connected components of knn graph - {cc}") 
# Number of connected components of knn graph - 2


min_neighbours = 5
print(f"Samples with less than {min_neighbours} neighbours - {(knn_graph.getnnz(1) < min_neighbours).sum()}")
# Samples with less than 5 neighbours - 0

hdb = HDBSCAN(metric='precomputed')
hdb.fit(knn_graph)
# Leads to exception
```

### Expected Results

Exception with error message indicating the possibility of disconnected knn graph.

### Actual Results

```python
Traceback (most recent call last):
  File "/Users/ganesh/projects/data-centric-ai/cleanlab/example.py", line 56, in <module>
    hdb.fit(knn_graph)
  File "/Users/ganesh/projects/data-centric-ai/cleanlab_env/lib/python3.9/site-packages/sklearn/cluster/_hdbscan/hdbscan.py", line 819, in fit
    self._single_linkage_tree_ = mst_func(**kwargs)
  File "/Users/ganesh/projects/data-centric-ai/cleanlab_env/lib/python3.9/site-packages/sklearn/cluster/_hdbscan/hdbscan.py", line 253, in _hdbscan_brute
    min_spanning_tree = _brute_mst(mutual_reachability_, min_samples=min_samples)
  File "/Users/ganesh/projects/data-centric-ai/cleanlab_env/lib/python3.9/site-packages/sklearn/cluster/_hdbscan/hdbscan.py", line 116, in _brute_mst
    raise ValueError(
ValueError: There exists points with fewer than 5 neighbors. Ensure your distance matrix has non-zero values for at least `min_sample`=5 neighbors for each points (i.e. K-nn graph), or specify a `max_distance` in `metric_params` to use when distances are missing.
```

### Versions

```shell
System:
    python: 3.11.4 (main, Jun 15 2023, 07:52:47) [Clang 14.0.0 (clang-1400.0.29.202)]
executable: /Users/ganesh/projects/temp/bin/python3
   machine: macOS-13.5.2-arm64-arm-64bit

Python dependencies:
      sklearn: 1.3.0
          pip: 23.0.1
   setuptools: 67.6.1
        numpy: 1.26.0
        scipy: 1.11.2
       Cython: None
       pandas: None
   matplotlib: None
       joblib: 1.3.2
threadpoolctl: 3.2.0

Built with OpenMP: True

threadpoolctl info:
       user_api: openmp
   internal_api: openmp
    num_threads: 8
         prefix: libomp
       filepath: /Users/ganesh/projects/temp/lib/python3.11/site-packages/sklearn/.dylibs/libomp.dylib
        version: None

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: /Users/ganesh/projects/temp/lib/python3.11/site-packages/numpy/.dylibs/libopenblas64_.0.dylib
        version: 0.3.23.dev
threading_layer: pthreads
   architecture: armv8

       user_api: blas
   internal_api: openblas
    num_threads: 8
         prefix: libopenblas
       filepath: /Users/ganesh/projects/temp/lib/python3.11/site-packages/scipy/.dylibs/libopenblas.0.dylib
        version: 0.3.21.dev
threading_layer: pthreads
   architecture: armv8

```

COMMENT:
Yes we can split the two exceptions and make the error message more explicit as well.

Labels: Enhancement