Here's a solution using tikz-qtree
plus the TikZ trees
library, which offers a pre-made edge from parent fork right
path for such trees.
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{trees} % this is to allow the fork right path
\begin{document}
\begin{tikzpicture}[grow'=right,level distance=1.25in,sibling distance=.25in]
\tikzset{edge from parent/.style=
{thick, draw, edge from parent fork right},
every tree node/.style=
{draw,minimum width=1in,text width=1in,align=center}}
\Tree
[. parent
[.{nice child0}
[.{grandchild0-0 } ]
[.{grandchild0-1 } ]
[.{grandchild0-2 } ]
[.{grandchild0-3 } ]
]
[.child1
[.{grandchild1-0 } ]
[.{grandchild1-1 } ]
[.{grandchild1-2 } ]
]
[.child2 ]
[.child3 ]
]
\end{tikzpicture}
\end{document}

Here's something like the second option (the node does exist).
There are only two changes to your MWE, in attribute/,style
:
The xshift needs adjusting
The anchor point you need can be expressed as an angle
Sorry: I pass on the bonus.
Here it is -- I leave final adjustments to your taste:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{trees}
\tikzstyle{every node}=[draw=black,thick,anchor=west, minimum height=2.5em]
\begin{document}
\begin{figure}[!htb]
\resizebox{\linewidth}{!}{
\begin{tikzpicture}[
criteria/.style={text centered, text width=2cm, fill=gray!50},
attribute/.style={%
grow=down, xshift=0cm,
text centered, text width=2cm,
edge from parent path={(\tikzparentnode.225) |- (\tikzchildnode.west)}},
first/.style ={level distance=8ex},
second/.style ={level distance=16ex},
third/.style ={level distance=24ex},
fourth/.style ={level distance=32ex},
fifth/.style ={level distance=40ex},
level 1/.style={sibling distance=10em}]
% Main Goal
\node[anchor=south]{SuperLongTitleWithNoMeaning}
[edge from parent fork down]
% Criteria and Attributes
child{node (crit1) [criteria] {Criteria1}
child[attribute,first] {node {Attribute\\Number1}}
child[attribute,second] {node {Attribute2}}
child[attribute,third] {node {Attribute3}}
child[attribute,fourth] {node {Attribute4}}
child[attribute,fifth] {node {Another\\Attribute}}}
%
child{node [criteria] {Criteria2}
child[attribute,first] {node {Attribute1}}
child[attribute,second] {node {Attribute2}}
child[attribute,third] {node {Third\\Criteria}}
child[attribute,fourth] {node {Longtext-\\criteria}}}
%
child{node [criteria] {Criteria3}
child[attribute,first] {node {Attribute\\two lines}}
child[attribute,second] {node {Attribute2}}
child[attribute,third] {node {Attribute3}}}
%
child{node [criteria] {Criteria4}
child[attribute,first] {node {Attribute1}}
child[attribute,second] {node {Attribute2}}}
%
child{node [criteria] {Criteria5}
child[attribute,first] {node {First\\Attribute}}
child[attribute,second] {node {Attribute2}}
child[attribute,third] {node {Third\\Criteria}}
child[attribute,fourth] {node {Longtext-\\criteria}}};
\end{tikzpicture}}
\caption{This is a nice tree.}
\end{figure}
\end{document}

Best Answer
You need to do
\begin{forest} for tree={edge path=<your path>}}
(without[]
!).I adjusted the distance a little bit, better would be to use for example half the level distance and not a fixed distance.
One can also use my
paths.ortho
library (needs bothtikzlibarypaths.ortho.code.tex
andtikzlibarypaths.ortho.tex
) and be available to use|-|
instead of--
.Code
Output